C#事件订阅与发布解析,演示
using System;
public class EventPublisher
{
public event EventHandler<EventArgs> EventOccurred;
public void RaiseEvent()
{
EventOccurred?.Invoke(this, EventArgs.Empty);
}
}
public class EventSubscriber
{
private readonly EventPublisher _publisher;
public EventSubscriber(EventPublisher publisher)
{
_publisher = publisher;
_publisher.EventOccurred += HandleEventOccurred;
}
private void HandleEventOccurred(object sender, EventArgs args)
{
Console.WriteLine("Event occurred!");
}
public void Unsubscribe()
{
_publisher.EventOccurred -= HandleEventOccurred;
}
}
这个类包含了两个类,一个是事件发布器EventPublisher,另外一个是事件订阅器EventSubscriber。EventPublisher有一个EventOccurred事件,触发事件时将调用所有已经注册的委托;EventSubscriber通过构造函数接收一个EventPublisher对象,并且注册一个事件处理方法来接收来自EventPublisher的事件。
主要代码部分解析:
在EventPublisher中声明一个EventHandler类型的EventOccurred事件;
定义RaiseEvent方法,当需要发布事件时,调用EventOccurred事件并传递参数;
在EventSubscriber的构造函数中,订阅EventPublisher的EventOccurred事件,并将事件处理方法HandleEventOccurred绑定到事件上;
在HandleEventOccurred方法中,定义处理事件的逻辑;
如果要取消订阅,可以在EventSubscriber中实现一个Unsubscribe方法,并在该方法中将HandleEventOccurred从EventPublisher的EventOccurred事件处理列表中去掉。
注意:事件发布和订阅的实现是基于委托的,因此我们可以使用lambda表达式来为EventHandler类型的委托提供事件处理程序。在实际项目中,需要根据业务需求对该类进行更多定制化的修改。