关于面试中涉及到的事件的问题,我们只需要抓住几个关键点就好了:
- 事件是委托的封装,可以理解为一种特殊的委托。
- 事件里面其实就两个方法(即add_event()和remove_event())和一个私有的委托变量,这两个方法里面分别是对这个私有的委托变量进行的合并和移除,当调用事件的+=时其实是调用的事件里面的add_event()方法,同样-=调用的是remove_event()方法。
- 事件只能够从对象外部增加新的响应方法和删除已知的响应方法,而不能主动去触发事件和获取其他注册的响应方法等信息。如果使用公有的delegate则不能做这些限制,也就是说事件对委托做了限制,使委托使用起来更加方便。也有人说事件是对委托的阉割,大概也是这个意思。
定义事件:
1 public delegate void MyStudyEvent(
object sender, EventArgs e);
2 public class TestEvent
3 {
4 public event MyStudyEvent eMyStudyEvent;
5 }