学懂C#编程:常用高级技术——委托(Delegate)应用场景——事件处理

事件处理: 委托是C#事件模型的核心。一个事件本质上是一个委托类型的字段,用于存储一系列方法的引用,当特定事件发生时,这些方法会被调用。

        我们通过下面这个例子来讲解C#中事件(Event)的基本用法,通过Publisher类发布事件,Subscriber类订阅并处理这个事件。下面我用更直白的语言解释这个过程:

Publisher 类

        想象一下,Publisher(发布者)就像是一个广播站,它可以发出某种信号或者说“事件”。在这个例子中,它有一个名为EventHappened的事件,这个事件的类型是EventHandler<EventArgs>。你可以认为EventHandler<EventArgs>是一种特殊的委托类型,它连接了事件触发的地方和事件响应的地方。当事件触发时,所有订阅了这个事件的人都会得到通知。

public class Publisher
{
    // 声明一个事件,类型是 EventHandler,它是一个委托类型,用于接收发送者对象和事件参数
    public event EventHandler<EventArgs> EventHappened;

    // 这个方法用于触发事件,即告诉所有订阅者:“事件发生了!”
    public void RaiseEvent()
    {
        // 使用?.运算符来安全地调用事件,如果没有人订阅,也不会抛出异常
        EventHappened?.Invoke(this, EventArgs.Empty); 
        // this 表示事件发生的源头,EventArgs.Empty 是默认的事件参数,通常用于表示事件发生,但没有携带额外信息
    }
}

Subscriber 类

Subscriber(订阅者)就像是收音机,它对特定的广播(事件)感兴趣。在构造函数中,Subscriber订阅了来自PublisherEventHappened事件,并指定了当这个事件发生时应该执行的方法OnEvent

public class Subscriber
{
    // 构造函数中,订阅Publisher的EventHappened事件
    public Subscriber(Publisher pub)
    {
        // += 操作符用于订阅事件,OnEvent 是事件触发时执行的方法
        pub.EventHappened += OnEvent;
    }

    // 这是事件处理方法,当EventHappened事件被Publisher触发时,这个方法就会被执行
    private void OnEvent(object sender, EventArgs e)
    {
        // 打印一条消息,表明事件已被处理
        Console.WriteLine("Event handled.");
    }
}

整体流程

  1. 创建一个Publisher实例,它是事件的源头。
  2. 创建一个或多个Subscriber实例,并将它们与Publisher关联起来。这个关联过程就是订阅事件,通过在Subscriber的构造函数中向Publisher的事件添加事件处理程序(OnEvent方法)来实现。
  3. Publisher通过调用RaiseEvent方法“广播”事件时,所有订阅了这个事件的Subscriber实例都会接收到通知,并执行它们各自定义的OnEvent方法,完成事件的处理。

        简而言之,事件机制让对象能够通知其他对象“某件事发生了”,而不用直接调用那些对象的方法,增强了代码的解耦和灵活性。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值