事件是实现交互的类型成员。
定义事件需要提供以下能力:
1.方法可登记/注销它对该事件的关注。
2.改事件发生时,登记了的方法会收到通知。
类型之所以能提供事件通知功能,是因为类型维护了一个已登记方法的列表。事件发生后,类型将通知列表中所有已登记的方法。
为了理解事件在CLR中的工作机制,举个实用的场景:
假定要设计一个电子邮件程序。电子邮件到达时,用户希望将该邮件转发给传真机或寻呼机。
构建这个应用程序时,假定先设计一个名为MailManager的类型,负责接收传入的电子邮件。MailManager类型公开了一个名为NewMail的事件。其他类型(如Fax和Pager)的对象可登记它们对这个事件的关注。MailManager收到信邮件时,会引发该事件,将邮件分发给每一个登记的对象。
应用程序初始化时,只实例化一个MailManager实例。然后,应用程序可实例化任意数量的Fax和Pager对象。