C# 的委托与事件具体是怎么一回事

C# 的委托与事件具体是怎么一回事
委托的弊端
1、调用委托时,如果其中的一个委托报错,则后面的不会被调用;
2、只有最后一个的返回值才会作为委托的返回值;
3、因为是数组,所以remove 的复杂度是O(n);
4、线程不安全。
委托为什么不等于函数指针?
1、委托可以“指向”多个函数;
2、委托可以指向同一个函数多次;
3、函数是包含在类中的,所以函数引用也包含了所在对象的信息;而C/C++的函数指针只是函数的入口地址。
委托的异步调用 BeginInvoke[不推荐使用]
比较古老,.NET Core 之后也不实现该方法了。

可使用 Task async/await 等进行替代,包括 WPF 中也是一样。
事件的本质
事件说白了是C#提供的语法糖,效果是:
1.将委托以私有变量的形式封装在类内,不让外面访问;
2.对于委托进行了封装,从而定义add与remove方法;
3.在add与remove中通过互锁的方式提供了线程安全性。
给事件定制化 Add/Remove
以 WPF 的 MVVM 模式中的 RelayCommand 为例:
