.Net Framework Programming 读书笔记(9)
[2005-05-13]
事件:定义了事件成员的类型(或者类型的实例)在某些特定事情发生的时候通知其他对象。
*允许对象登记该事件
*允许对象注销该事件
*允许定义事件的对象维持一个登记对象的集合,并在某些特定的事情发生时通知这些对象
CLR的事件模型建立在委托(delegate)这个机制上。
[2005-05-18]
11.1 发布事件
(参加源程序)
MailManager类实现相关工作:
1-定义一个类型用于保存所有需要发送通知接受者的附加信息
2-定义一个委托类型,用于指定事件触发时被调用的方法原形
3-定义一个事件成员
4-定义一个受保护的虚方法,负责通知事件的登记对象
5-定义一个方法,将输入转化为期望的事件
11.2 侦听事件
(参加源程序:Fax类)
怎样定义一个类型来使用另一个类型提供的事件:
mm.MailMsg += new MailManager.MailMsgEventHandler(FaxMsg);
==等效==mm.add_MailMsg(new MailManager.MailMsgEventHandler(FaxMsg));
当MailManager触发事件时,Fax对象的FaxMsg方法将被调用。
Fax对象Unrigister方法注销一个事件。
11.3 显示控制事件的注册
(3a/3b源程序注释)
显示定义一个私有委托链表;
显示定义事件及其访问器方法,value事件处理器。
11.4 在一个类型中定义多个事件
通过创造性地提供显示实现的Add和Remove访问前方法,我们可以极大地减少一个对象由于定义过多的事件而造成的内存浪费。
类型:EventHandlerSet为自定义的,管理一组 事件/委托对。
设计步骤:
1-定义一个受保护的实例集合字段EventHandlerSet
2-为类型希望提供的事件定义必要的成员Foo
3-为类型希望提供的事件定义必要的成员Bar
11.5 设计EventHandlerSet类型
以EventHandlerSet类为基础,提供一个线程安全的封装。SynchronizedEventhandlerSet
注释:FCL中有类型--System.ComponentModel.EvnetHandlerList类型
浙公网安备 33010602011771号