事件与委托

1.所处层次

delegate,event,还有属性关键字都是语言层次的,对于CLR来说,只有方法和成员变量。因为这些概念对于.netFramework来说太常用了,所以C#提供了关键字,让编译器自动生成对应的类和方法以及成员变量,并且还会在程序集的元数据中生成一个事件定义记录项,编译器和其他工具可利用这些元数据信息,但是CLR本身并使用这些元数据信息。 因为出于语言层次,所以不同的语言会提供不同的关键字。

 

2.委托是对函数的封装

委托可以看作是对函数类型的封装,表明了一类函数,这些函数具有相同的原型

eg. public delegate int Test(double f);

此委托就封装了int f(double)这种原型的函数。

 

3.事件是对委托集合的封装

事件表示同一种委托的多个实例的集合,可以通过+=增加新的委托实例。

eg. public event Test test;

此时可以通过如下增加事件处理程序

test += new Test(函数名);

 

4.事件标准写法

 

worker.cs

program.cs

事件处理函数的委托类型以EventHdanler结尾;

事件委托无返回值,参数为object,和继承自EventArgs的类型;

提供一个OnXXX的保护方法,用来激发事件;

通过+=为事件挂接处理程序,可以为一个事件挂接多个处理程序,实际执行测序为挂接先后的顺序。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值