第十一章 事件

1. 概述

  类型之所以能提供事件通知功能,是因为类型维护了一个已登记方法的列表。事件发生后,类型将通知列表中所有已登记的方法。

2. 名词解释

3. 主要内容

  3.1 设计要公开事件的类型

    ① 第一步:定义类型来容纳所有需要发送给事件通知接收者的附加信息。(EventArgs)

    ② 第二步:定义事件成员。(event)

    ③ 第三步:定义负责引发事件的方法来通知事件的登记对象。(protected virtual ...)(考虑线程安全)

    ④ 第四步:定义方法将输入转化为期望事件。

  3.2 编译器如何实现事件

    一条事件定义语句,在编译时会被转化为以下3个构造:

    ① 一个被初始化为null的私有委托字段

    ② 一个公共add_Xxx方法(Xxx是事件名)

    ③ 一个公共remove_Xxx方法(Xxx是事件名)

  3.3 设计侦听事件的类型

internal sealed class Fax
{
    public Fax(MailManager mm)
    {
        mm.NewMail += FaxMsg;
    }

    //新邮件到达时,MailManager将调用这个方法
    private void FaxMsg(Object sender, NewMailEventArgs e)
    {
        //...
    }

    //
    public void Unregister(MailManager mm)
    {
        mm.NewMail -= FaxMsg;
    }
}        

 

  3.4 显式实现事件

    C#编译器允许类的开发人员显示实现一个事件,使开发人员能够控制add和remove方法操纵回调委托的方式。

 

4. 总结

     事件是类型成员中较难理解的一种类型。主要是用的较少,多用用自然就理解深刻了。

posted @ 2015-03-05 15:49  stone lv  阅读(110)  评论(0编辑  收藏  举报