[From 11.1~11.4]事件

一.事件模式的用法
1.声明参数类型:NewMailEventArgs:EventArgs
2.声明委托类型:public delegate void EventHandler<TEventArgs>(Object sender,TEventArgs e);
3.声明事件:public event EventHandler<NewMailEventArgs> NewMail;
4.注册事件:NewMail+=XXX;
Q&A
问:为什么事件模式要求sender参数是Object类型?
答:
A.要求sender是Object主要原因是因为继承。如果事件声明的类型的派生类使用这个方法则需要转换类型,反正都要转换类型,这将sender定为Object类型没什么两样(个人觉得:如果没什么派生类用本身类型也可以)
B.将sender参数的类型定位Object的另一个原因是灵活性。他使委托能由多个类型使用。(个人觉得这个理由比较有说服力)
 
二.我所理解的事件和委托的区别
1.事件是对委托的再一次封装(事件含有委托类型的字段)
例如:
2.登记事件的回调方法是线程安全的。
3.CLR是有对事件的抽象概念的(可通过System.Reflection.EvenInfo来获得一个类关于事件的信息的)
注意:当一个类型有大量事件时,可以复习一下11.4 显示实现事件
posted @ 2018-12-28 14:32  Real陈麟  阅读(135)  评论(0编辑  收藏  举报