C#学习笔记 ------ 【事件EVENT】

一、发布者和订阅者

很多程序有这样─种需求:当程序中的一个特定事件发生之后,程序的其它部分可以得到该事件已经发生的通知。

发布者/订阅者模式可以满足这种需求。在这种模式下,发布者类定义了一系列程序的其它部分可能感兴趣的事件。其它类可以"注册",以便在这些事件发生时,发布者可以通知它们。这些订阅者类通过向发布者提供一个方法来"注册"以获取通知。事件发生时,发布者"触发事件",然后执行订阅者提交的所有事件。

由订阅者提供的方法称为回调方法,因为发布者通过执行这些方法来"往回调用订阅者的方法"。还可以将它们称为事件处理程序,因为它们是为处理事件而调用的代码。如下展示了一个事件的发布者以及该事件的三个订阅者。
在这里插入图片描述

二 声明、订阅事件

(1) 创建委托(类外)
(2) 通过委托定义事件(类中成员)
(3) 如果对事件感兴趣,对事件关联处理程序(类外)
(4) 发布者响应事件(发布者类中)

最开始事件HandlerNum中为null ,通过订阅者往里面添加方法。

 delegate void DelNum();    //定义委托类型

发布者

 class DataPublisher
    {
        public event DelNum HandlerNum;    //发布者中的事件
        public void updata()
        {
            if(HandlerNum!=null)
            {
                Console.WriteLine("发布者执行事件");
                HandlerNum();
            }
        }
    }

订阅者

 class DataSubscriber
    {
        int number;

        public void updateNumber()
        {
            number++;
            Console.WriteLine("订阅者DataSubscriber中的number:" + number);
        }
    }
class StringSubscriber
    {
        string str;
        public StringSubscriber(DataPublisher p)    //  向事件中添加方法
        {
            p.HandlerNum += updateNumber;
        }
        public void updateNumber()
        {
            str = "updateNumber";
            Console.WriteLine("订阅者StringSubscriber中的str:" + str);
        }

    }

三 关联、 执行事件

static void Main(string[] args)
        {
            //创建发布者对象
            DataPublisher publisher = new DataPublisher();
            //创建订阅者对象
            
            //订阅者对发布者中的事件感兴趣,关联一个处理程序
            DataSubscriber subscriber = new DataSubscriber();
            publisher.HandlerNum += subscriber.updateNumber;

            StringSubscriber strSubscriber = new StringSubscriber(publisher);

            //发布者执行事件
            //publisher.HandlerNum();//在外部执行事件不允许,只能在发布者类中调用
            publisher.updata();//执行发布者中的事件

            Console.ReadKey();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值