引发事件

更新:2007 年 11 月

事件功能是由三个互相联系的元素提供的:提供事件数据的类、事件委托和引发事件的类。.NET Framework 具有命名与事件相关的类和方法的约定。如果希望您的类引发一个名为 EventName 的事件,您需要以下元素:

  • 包含事件数据的类,名为 EventNameEventArgs。此类必须是从 System.EventArgs 派生的。

  • 事件的委托,名为 EventNameEventHandler

  • 引发事件的类。该类必须提供事件声明 (EventName) 和引发事件 (OnEventName) 的方法。

.NET Framework 类库或第三方类库中可能已经定义了事件数据类和事件委托类。在这种情况下,您就不需要定义这些类了。例如,如果您的事件不使用自定义数据,您可以使用 System.EventArgs 作为事件数据并使用 System.EventHandler 作为委托。

使用 event 关键字在类中定义事件成员。当编译器在类中遇到 event 关键字时,它会创建一个私有成员,例如:

private EventNameHandler eh = null;

编译器还会创建两个公共方法,即 add_EventName 和 remove_EventName。这些方法是事件挂钩,它们允许委托与事件委托 eh 合并或从该事件委托中移除。这些详细信息对程序员是隐藏的。

说明:

在除 C# 和 Visual Basic 2005 以外的其他语言中,编译器可能不会自动生成与事件成员对应的代码,您可能需要显式地定义事件挂钩和私有委托字段。

定义事件实现后,您必须确定引发事件的时间。通过在定义事件的类或派生类中调用受保护的 OnEventName 方法来引发事件。OnEventName 方法通过调用委托,传入所有事件特定的数据来引发事件。事件的委托方法可以执行事件操作或处理事件特定的数据。

说明:

受保护的 OnEventName 方法也允许派生类重写事件,而不必向其附加委托。派生类必须始终调用基类的 OnEventName 方法以确保注册的委托接收到事件。

如果希望处理另一个类中引发的事件,请向事件中添加委托方法。如果您不熟悉 .NET Framework 中事件的委托模型,请参见事件和委托

请参见

任务

如何:引发和使用事件

如何:在类中实现事件

概念

事件和委托

其他资源

处理和引发事件