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的保护方法,用来激发事件;
通过+=为事件挂接处理程序,可以为一个事件挂接多个处理程序,实际执行测序为挂接先后的顺序。