委托和事件的区别
在这里,首先讲解委托:
说到委托,肯定会接着想到“delegate ”,就我个人的总结就是:将方法作为参数传递。但是这个说法是错误的,因为委托本质上就是一个类型(class),我们通常传递的string 、int 等,也是一种类型,所以说,委托也能够传递了。
写到这里,补充一下,
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。
Action 和Func 的区别:Action 是一种已经封装好的无返回值的委托,调用的时候,直接
Action a= p => { }; //参数为int类型 无返回值的匿名函数
Func是一种必须有返回值的委托。调用示例:
Func func = () =>
{
return 0;
}; //无参数,返回值为int类型的委托
注:两者都可以有参数或者无参数。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
然后讲解事件:
首先,说明事件的由来。在我们使用委托的时候,总会使用 delegate=functionName(); 首次使用可以(“=”,是赋值语法),但是,如果多次使用,那么最终执行委托的时候,只能够执行最后一个函数,相当于把其他的函数弄丢了,所以,有一定的不安全性因素。那么,为了保证委托的安全性,从而出现了事件。简言之,事件就是为了保证委托使用的安全性产生的。事件的调用只能够使用“+=”和“-=”,所以,不会出现赋值现象,将其他的函数覆盖掉。