委托,事件

委托概念

delegate 是表示对具有特定参数列表和返回类型的方法的引用的类型。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托实例调用方法。

委托用于将方法作为参数传递给其他方法。 事件处理程序就是通过委托调用的方法。 你可以创建一个自定义方法,当发生特定事件时,某个类(如 Windows 控件)就可以调用你的方法。 下面的示例演示了一个委托声明:

public delegate int PerformCalculation(int x, int y);

委托对象通常通过提供委托将封装的方法的名称或使用匿名方法构造。 对委托进行实例化后,委托会将对其进行的方法调用传递到该方法。 调用方传递到委托的参数将传递到该方法,并且委托会将方法的返回值(如果有)返回到调用方。 这被称为调用委托。 实例化的委托可以按封装的方法本身进行调用。 例如:

// Create a method for a delegate.
public static void DelegateMethod(string message)
{
    System.Console.WriteLine(message);
}
// Instantiate the delegate.
Del handler = DelegateMethod;

// Call the delegate.
handler("Hello World");

事件概念:

事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方

谈到事件,我们涉及到两个角色:事件发布者(Publisher)和事件订阅者(Scriber),也可以说是事件发送者(Sender)和事件接收者(Receiver)的关系。举个例子来说,市面上目前有许多杂志,杂志的种类也很多。而我只对其中的某些感兴趣,那么我就可以向杂志发行商提出订阅。之后,每当杂志发行时,我就会收到我在杂志发行商那儿订阅的杂志。在这个关系中,杂志发行商就相当于事件发行者,而我就是事件订阅者。每当杂志发行时,就触发了一个发行事件。

用面向对象的语言解释,这两者的意义如下:

事件发行者(Publisher)

它是一个对象,且会维护自身的状态信息。每当状态信息发生变动时,便触发一个事件,并通知所有的事件订阅者。对于杂志发行商来说,每本杂志都有自己的信息在里面,当杂志发行时,我要通知订阅该杂志的人:杂志已经发行啦,请注意查收!

事件接收者(Receiver)

这个对象要注册它感兴趣的对象,也就是订阅它自己喜欢的杂志啦。另外,这个对象通常要提供一个事件处理方法,在事件发行者触发一个事件后,会自动执行这个方法。对于上面所举的例子来说,也就是我收到杂志后要做什么事情,比如,你可以满世界地大喊:我收到杂志啦!也可以将杂志收藏起来慢慢欣赏,具体怎么实现完全取决你自己的喜好。

以下是.NET事件处理机制的模型:

 public class Publisher
    {
        public delegate void DemoEventHandler();

        public event DemoEventHandler OnDemo;

        public void BeginEvent()
        {
            if (OnDemo!=null)
            {
                OnDemo();
            }
        }

    }
 public class Subscriber
    {

        public void DelMethod()
        {
            Console.WriteLine("Hello World");
        }

    }
static void Main(string[] args)
        {
            Publisher publisher = new Publisher();
            Subscriber subscriber = new Subscriber();
            publisher.OnDemo += subscriber.DelMethod;
            publisher.BeginEvent();
        }
时间: 2024-10-12 20:58:17

委托,事件的相关文章

C#委托事件

1.委托事件关键词:delegate 2.在声明函数的时候在函数类型后面加上 例:public delegate int Test(int x,int y) 3.定义委托变量:Test t1,委托接收的是方法引用. 4.委托变量可以当成函数的调用.用赋值“=” 委托变量 = 函数名 5.委托类型的变量,可以引用任何一个满足要求的方法,类似于C语言的函数指针. 6.一个委托变量可以使用“+=”挂接多个方法,也能使用“-=”动态地移除某个方法的引用. 7.引用多个方法的委托变量称为“多路委托”. 8

观察者(Observer)模式 * 委托事件

观察者(Observer)模式:定义了一种一对多的依赖关系.让多个观察者对象同时监听某一个主题对象.   这个主题对象发生变化时会通知所有观察者对象,使他们字段更新自己 /* * 抽象主题(Subject)角色:主题角色把所有对观察考对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者. 抽象主题提供一个接口,可以增加和删除观察者对象,主题角色又叫做抽象被观察者(Observable)角色,一般用一个抽象类或者一个接口实现. * 抽象观察者(Observer)角色:为所有的具体观察者定义

.Net 命名(委托,事件==)

委托及参数命名: public delegate void ClickedEventHandler(object sender, ClickedEventArgs e); ClickedEventHandler Clicked; .Net 命名(委托,事件==),布布扣,bubuko.com

jQuery Direct and delegated events 直接事件与委托事件

ref: http://api.jquery.com/on/ 直接事件: 将事件委托直接绑定到dom元素上,当事件发生时触发handler. 委托事件:  将事件委托绑定到dom元素的外层容器上,当事件发生时,冒泡到匹配的外层元素,触发相应handler. 采用委托事件的优势有2点: 1.效率高.对子元素数量非常多时,只需要绑定一个handler到父容器. 2. 可以对事件绑定调用时,尚未生成的子元素,仍然有效(只需要保证父容器已存在). jquery 使用on方法实现事件绑定. <!DOCTY

C# 委托 事件 之 窗体之间互传值

C# 委托 事件 之 窗体之间互传值 效果: Form1.cs: using System; using System.Windows.Forms; namespace 窗体事件互传值2 { public delegate void SetTxb2Del(string str, object obj);//定制针对Txb2的委托 public partial class Form1 : Form { private event SetTxb2Del st2dEvent;//声明Txb2委托的事件

委托事件的理解

委托是一种带有签名的类,需要用复合这个签名的静态函数或者非静态函数来初始化,就像楚怀王说:"先入秦关者望之".此时还不知道谁会先入秦观,可能是刘邦,可能是项羽.等到时间发展到一定时机,结论出来了,这个事委托给刘邦了.前提是刘邦复合这个签名,先入秦关了. 事件和委托类似,只不过事件源于委托,声明的时候需要先定义一个委托类型.也就是委托和类同级,事件和类里的属性方法同一个级别.事件只能在定义该事件的类里被初始化和使用,除了+=和-=.而委托无此限制.事件更形象化,就像,反秦起义这个事件爆发

一场武林盟主争霸赛-观察者模式PK委托事件技术

设计模式中提到观察者模式又叫做发布-订阅(Publish-订阅)模式.它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有 观察者对象,使它们能够自动更新自己. C#中提到,委托是对函数的封装,可以当作给方法的特征指定一个名称.而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程.事件其实就是设计模式中观察者模式在.NET中的一种实现方式. 委托就是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的

对jQuery中on方法委托事件的理解

关于on方法中的委托事件,官方JQ API如下: http://api.jquery.com/on/#on-events-selector-data-handler 参考大牛阮一峰的博文: http://www.ruanyifeng.com/blog/2011/08/jquery_best_practices.html 什么时候使用委托事件: 1.对未被创建的元素添加事件监听 2.避免频繁添加或删除event handler,委托父元素来进行事件处理 使用委托事件的优点: 1.大量减少监听元素的

C#解惑1——委托&amp;事件(转)

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性. 委托和事件在.NET Framework[1]中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易. 中文名 c#委托 外文名 Delegate 编程语言 C# 作    用 方便的引用被委托的方法 应    用 NET Framework 目录 1引言 2参数

4.net基础之委托事件

委托的声明public delegate void NoReturnNoPara();访问修饰符 delegate关键字 返回值 委托名委托的调用NoReturnNoPara nrnp = new NoReturnNoPara(传递方法名);传递的方法必须满足,没有返回值,没有参数的限制.实例方法,静态方法,虚方法nrnp.Invoke(); 泛型委托Func:接收0-17个输入参数,一个返回参数的泛型委托Action:接收0-17个输入参数,0个返回参数的泛型委托 委托的意义:解耦使用泛型+委