欢迎光临散文网 会员登陆 & 注册

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

2023-07-09 13:39 作者:独立观察员  | 我要投稿

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 为例:


 

C# 的委托与事件具体是怎么一回事的评论 (共 条)

分享到微博请遵守国家法律