[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;同一个类型的大量事件高效管理;

posted @ 2018-01-01 10:33  xsz1234  阅读(218)  评论(0编辑  收藏  举报