C#委托和事件

1、事件应该用引发(Raise),不应用调用(Invoke)。

2、调用多个委托直接用多播委托即可(MulticastDelegate),所有的委托类型都继承于多播委托,所以都可以+和-来组合成多播委托。

3、事件的默认实现是个多播委托,事件可以使用+=和-=来注册和移除委托,内部则是对一个多播委托直接操作。

4、事件是可以自定义+=和-=的行为的,也就是说可以不使用多播委托来实现,譬如说你可以用并发通知来实现事件,也就是把委托都丢到不同的Task里面去一起调用。

5、委托和事件的区别在于,事件是个规约,委托是个实现(当然抽象上的委托也可以不是个具体的实现)。规约的含义是,我定义了这么个语法,你可以通过+=和-=把委托挂载到这个东西(事件)上,当发生这个事件的时候,我会确保这些委托都被得到调用。但是具体是怎么调用的,你不用关心。

文章作者: Shawn Qin
文章链接: https://qinshuang1998.github.io/2018/07/27/csharp-event/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Shawn's Blog

Gitalk 加载中 ...