event (C# 参考)

借助事件成员,对象可以触发通知。 事件用户可以通过提供事件处理程序来附加事件的可执行代码。 event 关键字声明事件。 该事件属于委托类型。 当对象触发事件时,该事件将调用所有提供的事件处理程序。 事件处理程序是添加到事件的委托实例,并在引发事件时执行。 事件用户可以在事件上添加或删除其事件处理程序。

示例

下面的示例演示如何声明和引发使用 EventHandler 作为基础委托类型的事件。 要查看完整代码示例了解如何使用泛型 EventHandler<TEventArgs> 委托类型以及如何订阅事件并创建事件处理程序方法,请参阅如何发布符合 .NET 准则的事件

public class SampleEventArgs
{
    public SampleEventArgs(string text) { Text = text; }
    public string Text { get; } // readonly
}

public class Publisher
{
    // Declare the delegate (if using non-generic pattern).
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event in a thread-safe manner using the ?. operator.
        SampleEvent?.Invoke(this, new SampleEventArgs("Hello"));
    }
}

事件是一种特殊的多播委托,仅可以从声明事件的类(或派生类)或结构(发布服务器类)中对其进行调用。 如果其他类或结构订阅该事件,则在发布服务器类引发该事件时,将调用其事件处理程序方法。 有关详细信息和代码示例,请参阅事件委托

可以将事件标记为publicprivateprotectedinternalprotected internalprivate protected。 这些访问修饰符定义该类的用户访问该事件的方式。 有关详细信息,请参阅访问修饰符

关键字和事件

下列关键字应用于事件。

关键字 说明 更多信息
static 使事件可供调用方在任何时候进行调用,即使不存在类的实例。 静态类和静态类成员
virtual 允许派生类使用重写关键字重写事件行为。 继承
sealed 指定对于派生类,它不再是虚拟的。
abstract 编译器不会生成 addremove 事件访问器块,因此派生类必须提供其自己的实现。

可以通过使用静态关键字将事件声明为静态事件。 这可使事件可供调用方在任何时候进行调用,即使不存在类的实例。 有关详细信息,请参阅静态类和静态类成员

可以通过使用虚拟关键字将事件标记为虚事件。 这可使派生类使用重写关键字重写事件行为。 有关详细信息,请参阅继承。 重写虚拟事件的事件也可以为密封,指定对于派生类,它不再是虚拟的。 最后,可以声明事件为抽象,这意味着编译器将不会生成 addremove 事件访问器块。 因此,派生类必须提供其自己的实现。

C# 语言规范

有关详细信息,请参阅 C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。

另请参阅