[Clr via C#读书笔记]Cp11事件
Cp11事件
类型之所以提供事件通知功能,是因为类型维护了一个已登记方法的列表,事件发生后,类型将通知列表登记的所有方法;
事件模型建立在委托的基础上。委托是调用回调方法的一种类型安全的方式。
设计事件类型
定义事件参数
EventArgs
定义事件成员
public event 委托类型<事件参数> 事件名称;
sender之所用Object,一个是考虑继承,一个是考虑灵活;
返回值是void;
定义负责引发事件的方法来通知事件的登记对象
protected virtual void OnNewMain(参数 e)
{
var temp=interlocked.CompareExchange(ref NewMail,null,null);
//考虑线程安全,这里需要仔细考虑
//事件主要在单线程中使用,所以线程安全并不是一个太大的问题
if(temp!=null)temp(this,e)
}
触发事件
在需要的地方调用触发事件的方法。
编译器如何实现事件
一个委托,一个add,一个remove
设计侦听事件类型
显示实现事件
事件集合,key-value;同一个类型的大量事件高效管理;