事件、委托和 CLR 事件命名约定

      在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。.NET Framework 定义了一个类型 (Delegate),该类型在事件和事件处理程序之间提供中介。从技术上来说,委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。虽然委托具有许多其他的用途,但这里只讨论委托的事件处理功能。下面的示例显示了事件委托声明。

public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);

       按照约定,.NET Framework 中的事件委托有两个参数:引发事件的源(由 sender 参数表示)和该事件的数据(由 e 参数表示)。

      应通过从派生类调用受保护的 OnEventName 方法(如果这种方法可用)来引发事件。OnEventName 方法通过调用委托和传递任何事件特定的数据来引发事件。事件的委托方法可以执行事件操作或处理事件特定的数据。

      受保护的 OnEventName 方法也允许派生类重写事件,而不必向其附加委托。派生类必须始终调用基类的 OnEventName 方法以确保注册的委托接收到事件。然而,在为 sealed 或 NotInheritable 的类中,您可以直接引发事件,而不是在 OnEventName 方法中间接引发事件。

   private AlarmEventHandler m_alarmEvent;
   public AlarmEventHandler  AlarmEvent
   {
       add{this.m_alarmEvent+=value;}
       remove{this.m_alarmEvent;-=value;}
   }
   public void  OnAlarmEvent
   {
       if(this.m_alarmEvent!=null){
           this.(this.m_alarmEvent(null,null)
       }
   }

posted @ 2011-04-20 09:37  吾爱易逝  阅读(887)  评论(0编辑  收藏  举报