1.什么是委托:简单来说委托是一个类型
多播委托:委托也可以包含多个方法,这种委托叫做多播委托。使用多播委托就可以按照顺序调用多个方法,调用多播委托只能得到最后一个方法的返回值,一般我们把多播委托的返回类型声明为void。 如果通过委托调用的其中一个方法抛出异常,整个迭代就会停止。
匿名方法:另外一种使用委托的方式,不用去定义一个方法,应该说是使用匿名方法(方法没有名字)
Lambda表达式:从C#3.0开始,可以使用Lambda表达式代替匿名方法。只要有委托参数类型的地方就可以使用Lambda表达式。
事件(event):只能在类里边声明,成为类成员。 不能在方法里声明成局部变量。
2.事件与委托的联系和区别:
-事件是一种特殊的委托,或者说是受限制的委托,是委托一种特殊应用,只能施加+=,-=操作符。二者本质上是一个东西。
-event ActionHandler Tick; //编译成创建一个私有的委托示例, 和施加在其上的add, remove方法.
-event只允许用add,remove方法来操作,这导致了它不允许在类的外部被直接触发,只能在类的内部适合的时机触发。委托可以在外部被触发,但是别这么用。
-使用中,委托常用来表达回调,事件表达外发的接口。
-委托和事件支持静态方法和成员方法, delegate(void * pthis,f_ptr), 支持静态返方法时, pthis传null.支持成员方法时, pthis传被通知的对象.
-委托对象里的三个重要字段是, pthis, f_ptr, pnext,也就是被通知对象引用, 函数指针/地址, 委托链表的下一个委托节点.