C#中事件和委托一起怎么使用?举个例子详细解释一下
时间: 2024-09-18 22:05:10 浏览: 7
在C#中,事件和委托经常结合使用以实现松耦合的通信机制。事件允许类公开其状态的变化,而不需要暴露直接调用的方法;委托则充当事件通知的媒介。
**委托示例**:
```csharp
using System;
// 委托声明
public delegate void MyEventHandler(string message);
class Publisher // 发布者,拥有事件
{
public event MyEventHandler MyEvent;
// 触发事件的方法
public void RaiseEvent(string msg)
{
MyEvent?.Invoke(msg); // 使用null条件运算符避免未订阅的情况
}
}
class Subscriber // 订阅者,订阅并处理事件
{
public void HandleMessage(string message)
{
Console.WriteLine($"Received message: {message}");
}
static void Main()
{
Publisher publisher = new Publisher();
subscriber1 := new Subscriber();
subscriber2 := new Subscriber();
// 订阅事件
publisher.MyEvent += subscriber1.HandleMessage;
publisher.MyEvent += subscriber2.HandleMessage;
// 触发事件
publisher.RaiseEvent("Hello from publisher");
}
}
```
**事件示例**:
在这个例子中,`Publisher`类有一个名为`MyEvent`的事件,当`RaiseEvent`方法被调用时,所有订阅了这个事件的订阅者(如`Subscriber`类)都会收到消息。这样,`Publisher`无需关心是谁在接收它的通知,只需关注何时以及如何改变状态。