The relation between event and delegate in visual c#

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

        在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。

        委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调,而事件是委托的一种使用(事件的引发是通过调用委托实现的,而委托不仅仅可以用来实现事件的引发。 。同时委托具有许多其他的用途。一个委托声明足以定义一个委托类。声明提供委托的签名,公共语言运行库提供实现。

        与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。

结合delegate的实现,我们可以将自定义事件的实现归结为以下几步:
        1.定义delegate对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。
        2.定义事件参数类,此类应当从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
        3.定义事件处理方法,它应当与delegate对象具有相同的参数和返回值类型。
        4.用event关键字定义事件对象,它同时也是一个delegate对象。
        5.用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。
        6.在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。名字是OnEventName。
        7.在适当的地方调用事件触发方法触发事件。

参考资料:http://www.365tech.net/csharp/31433

                    http://www.cnblogs.com/brinksman/archive/2005/09/01/228202.html

                    http://www.cnblogs.com/edgar-sun/archive/2007/04/08/704335.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值