C#事件订阅与发布解析,演示

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类型的委托提供事件处理程序。在实际项目中,需要根据业务需求对该类进行更多定制化的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值