C# 编程指南:事件的概念和处理

在C#中,事件(Event)是一种特殊类型的委托,用于实现发布者-订阅者模式。事件提供了一种机制,使发布者能够通知订阅者某个特定的操作已经发生。

部分
1
事件的概念
事件是一种特殊类型的委托,它允许对象在特定的操作发生时通知其他对象。
事件由发布者(Publisher)定义和触发,并由订阅者(Subscriber)接收和处理。
发布者通过触发事件来通知订阅者,而订阅者通过订阅事件来接收通知。
部分
2
事件的处理
发布者定义事件,并提供一个适当的方法来触发事件。
订阅者通过定义一个与事件签名相匹配的事件处理方法,并将其订阅到事件上。
当事件触发时,订阅者的事件处理方法将被调用,从而实现事件的处理逻辑。
// 定义事件发布者类
class Publisher
{
    // 定义事件
    public event EventHandler<MyEventArgs> MyEvent;

    // 触发事件
    public void RaiseEvent(string message)
    {
        MyEventArgs args = new MyEventArgs(message);
        OnMyEvent(args);
    }

    // 发起事件通知
    protected virtual void OnMyEvent(MyEventArgs e)
    {
        MyEvent?.Invoke(this, e);
    }
}

// 定义事件参数类
class MyEventArgs : EventArgs
{
    public string Message { get; }

    public MyEventArgs(string message)
    {
        Message = message;
    }
}

// 定义事件订阅者类
class Subscriber
{
    // 事件处理方法
    public void HandleEvent(object sender, MyEventArgs e)
    {
        Console.WriteLine("Event handled: " + e.Message);
    }
}

// 创建发布者和订阅者对象
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();

// 订阅事件
publisher.MyEvent += subscriber.HandleEvent;

// 触发事件
publisher.RaiseEvent("Hello, World!");

在以上示例中,Publisher 类定义了一个事件 MyEvent,Subscriber 类定义了一个事件处理方法 HandleEvent。通过订阅 MyEvent 事件,Subscriber 对象可以接收到事件触发时的通知。

可以注意到以下关键点:
事件的定义使用 event 关键字,并指定事件委托类型。
事件的触发通过调用事件委托的 Invoke 方法来实现。
事件订阅使用 += 运算符将事件处理方法添加到事件的订阅列表。
事件处理方法的签名必须与事件委托类型匹配。
    目录

  • 1.
    事件的概念
  • 2.
    事件的处理