C#中的System.ComponentModel.EventInfo和EventHandler可以用来定义和订阅事件。一个类定义事件,另一个类可以作为监听者注册对事件的处理函数。代码举例
时间: 2024-10-28 18:08:26 浏览: 11
在C#中,`System.ComponentModel.EventInfo`和`EventHandler`是一对重要的概念,它们共同用于事件驱动编程。下面是一个简单的例子:
首先,我们假设有一个基础的事件源类,名为`EventPublisher`,它有一个名为`OnMyEvent`的事件:
```csharp
using System;
using System.ComponentModel;
public class EventPublisher : IEventPublisher
{
public event EventHandler<MyEventArgs> OnMyEvent;
// 其他类的方法...
protected virtual void RaiseMyEvent(MyEventArgs e)
{
OnMyEvent?.Invoke(this, e);
}
// 调用事件的地方
public void TriggerMyEvent()
{
RaiseMyEvent(new MyEventArgs());
}
}
```
这里,`IEventPublisher`是接口,`EventHandler<MyEventArgs>`是泛型委托,表示接收`MyEventArgs`类型的事件处理器。
接着,我们定义一个监听者类`EventSubscriber`:
```csharp
public class EventSubscriber : ISubscribeToEvents
{
private readonly EventPublisher _publisher;
public EventSubscriber(EventPublisher publisher)
{
_publisher = publisher;
_publisher.OnMyEvent += HandleMyEvent;
}
~EventSubscriber()
{
_publisher.OnMyEvent -= HandleMyEvent;
}
private void HandleMyEvent(object sender, MyEventArgs e)
{
Console.WriteLine($"Received event with data: {e.Message}");
}
// 接口实现...
}
// 实际上使用时...
public void Main()
{
var publisher = new EventPublisher();
var subscriber = new EventSubscriber(publisher);
// 触发事件
publisher.TriggerMyEvent();
// 理论上,此时subscriber会接收到并处理事件
}
```
在这个例子中,`HandleMyEvent`方法就是事件的处理函数,当`EventPublisher`的`OnMyEvent`被触发时,就会调用这个方法。
阅读全文