什么是事件?事件跟委托的区别

什么是事件?事件和委托的区别?

关于面试中涉及到的事件的问题,我们只需要抓住几个关键点就好了:

 

  1. 事件是委托的封装,可以理解为一种特殊的委托。
  2. 事件里面其实就两个方法(即add_event()和remove_event())和一个私有的委托变量,这两个方法里面分别是对这个私有的委托变量进行的合并和移除,当调用事件的+=时其实是调用的事件里面的add_event()方法,同样-=调用的是remove_event()方法。
  3. 事件只能够从对象外部增加新的响应方法和删除已知的响应方法,而不能主动去触发事件和获取其他注册的响应方法等信息。如果使用公有的delegate则不能做这些限制,也就是说事件对委托做了限制,使委托使用起来更加方便。也有人说事件是对委托的阉割,大概也是这个意思。

定义事件:

1 public delegate void MyStudyEvent(object sender, EventArgs e);
2 public class TestEvent
3 {
4     public event MyStudyEvent eMyStudyEvent;

5 }