事件委托怎么写( 二 )


在C#中,所有的委托都是从System.MulticastDelegate类派生的 。
委托隐含具有sealed属性,即不能用来派生新的类型 。
委托最大的作用就是为类的事件绑定事件处理程序 。在通过委托调用函数前,必须先检查委托是否为空(null),若非空,才能调用函数 。
在委托实例中可以封装静态的方法也可以封装实例方法 。
在创建委托实例时,需要传递将要映射的方法或其他委托实例以指明委托将要封装的函数原型(.NET中称为方法签名:signature) 。注意,如果映射的是静态方法,传递的参数应该是类名.方法名,如果映射的是实例方法,传递的参数应该是实例名.方法名 。只有当两个委托实例所映射的方法以及该方法所属的对象都相同时,才认为它们是想等的(从函数地址考虑) 。
5.委托与事件public CoreTypes.NodeCallBack NCallBack;
其实就是一个字段,这个字段类型是NodeCallBack,字段的名字叫NCallBack
如果你这样声明
public event CoreTypes.NodeCallBack NCallBack;
就会定义一个事件,事件也是属于这个委托类型的,但是他与这个委托类型的字段是有区别的,这个事件在类外面访问的时候,你是不能引发,或者说主动执行的,而声明为一个public字段的话,在类的外面就可以随意操作了
最后一句是给这个字段中包含的委托添加一个匿名方法
回答补充:
二楼说的没错,我再补充一下
使用event声明的是一个事件,实际上在编译的时候会生成两个方法(add_XXX和remove_XXX)和一个字段,你在类内部使用+= -=其实编译的时候调用的是两个方法,而取出事件中包含的委托则编译时直接访问字段
但是在类的外面,你只能使用+= -=访问add和remove方法,这样就防止在类的外部直接修改委托中注册的处理器,保护类不被恶意破坏,而也仅能在内部引发一个事件
【事件委托怎么写】

事件委托怎么写

文章插图