不少书中喜欢把委托和事件放到一个高度上来讲述,这就造成了初学者会对这两者关系产生疑惑,委托和事件似乎没什么区别。
其实.net中的事件就是微软提供给我的语法糖,目的是为了减少代码量,其实事件的相关功能都能用委托做出来。
{
Console.WriteLine(msg);
}
}
Person中采用的是触发事件来通知调用者,我的工作做完了. WorkEnd就是事件
Person1中没用事件,纯粹的委托方法,完全达到了事件的目的.
如果你用IL 反汇编程序看下生成的代码 你会发现我Person和Person1中的代码是类似的
实际上我的Person1就是模拟了CLR自动生成的委托代码,你在Person看到那个WorkEnd事件,在被编译的时候就是自动生成了私有变量委托,和add_ remove_ 方法
采用事件写的代码 减少了代码量 好处就是这个 比如这里的
}
用一句
public event PersonWorkHandle WorkEnd;
就能代替
另外注册事件处理程序的时候可以很方便的用+=运算符
总之,事件就是委托的一个特殊应用罢了,没什么神秘的地方