0. 前言
事件和委托是C#中的高级特性,也是C#中很有意思的一部分。出现事件的地方,必然有委托出现;而委托则不一定会有事件出现。那为什么会出现这样的关系呢?这就需要从事件和委托的定义出发,了解其中的内在。
1. 委托
说起委托,就不得不回忆一下之前在Linq篇中介绍的匿名方法,其中提到了Func和Action这两个类型。这两个类型就是委托。
委托在C#中定义为一种面向对象形式的方法寻址方案。简单来讲,就是定义一个类型,然后表示这个类型代表某一种方法。而委托对象,就是方法参数化。委托可以实现将方法当做一个参数传递给另一个方法,也可以认为是反射中的MethodInfo的一种特例(实际上并没有太多关系)。
委托不关心方法叫什么,也不关心方法从哪来(归属于哪个类或者哪个对象),只关心方法需要哪些参数,返回什么类型。
说到这里,我们来看一下如何定义一个委托吧,委托的定义形式如下:
delegate <返回类型> 委托名(参数列表);//参数列表代表任意个参数
由之前的定义形式,我们可以知道委托也是一种类型,所以它的定义也符合类型的定义规范。现在我们定义一个没有返回值也没有参数类型的委托作为我们创建的第一个委托:
public delegate void FirstDel();// 类型名称是 FirstDel
简单的使用一下: