C# 编程指南:委托(Delegate)和事件(Event)

在C#中,委托(Delegate)和事件(Event)是用于实现事件驱动编程的重要概念。委托用于定义方法的类型,而事件则用于通知其他对象某个特定的操作已经发生。

部分
1
委托的概念
委托是一种类型,它引用一个或多个具有相同签名的方法。
委托可以看作是函数指针,它允许将方法作为参数传递、存储和调用。
委托通过定义委托类型和实例化委托对象来使用。
// 定义委托类型
delegate void MyDelegate(string message);

// 实例化委托对象
MyDelegate myDelegate = new MyDelegate(MyMethod);

// 委托调用方法
myDelegate("Hello, World!");

// 委托需要引用具有匹配签名的方法
void MyMethod(string message)
{
    Console.WriteLine(message);
}
部分
2
事件的概念
事件是一种特殊类型的委托,用于实现发布者-订阅者模式。
发布者(Publisher)定义并触发事件,订阅者(Subscriber)通过订阅事件来接收通知。
事件使用 event 关键字声明,并通过 += 和 -= 运算符将事件处理方法添加到或移除出事件的订阅列表。
// 定义事件发布者类
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 对象可以接收到事件触发时的通知。

    目录

  • 1.
    委托的概念
  • 2.
    事件的概念