在C#中,委托(Delegate)和事件(Event)是用于实现事件驱动编程的重要概念。委托用于定义方法的类型,而事件则用于通知其他对象某个特定的操作已经发生。
// 定义委托类型
delegate void MyDelegate(string message);
// 实例化委托对象
MyDelegate myDelegate = new MyDelegate(MyMethod);
// 委托调用方法
myDelegate("Hello, World!");
// 委托需要引用具有匹配签名的方法
void MyMethod(string message)
{
Console.WriteLine(message);
}
// 定义事件发布者类
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 对象可以接收到事件触发时的通知。