谈一谈C#事件的本质

来源:互联网 发布:淘宝怎么参加公益活动 编辑:程序博客网 时间:2024/05/21 15:46
       委托和事件本身没有可比性,因为委托是类型,事件是对象,常在一起比较的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。两者的关系是:事件的内部是用委托实现的。

       因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。(个人觉得可以参考listbox的相关操作将其理解为listbox.items.add()和listbox.items.remove()操作。

事件是用来限制委托实例的。事件只能+=、-=,不能直接赋值,不能清空,不能外部触发事件。

假设我们定义了这一个委托
public delegate void MyDelegate();
再定义该委托相关的事件:
public event MyDelegate Event;

相当于在后台实现了如下操作:
private MyDelegate OnEvent;public void Add(MyDelegate d){   OnEvent+=d;}public void Remove(yDelegate d){   OnEvent-=d;}

这就好理解了为什么事件只能+=,-=,而不能有其它的操作。
原创粉丝点击