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# 语法和用法的权威资料。

另请参阅