C#基础(四十)C#实现事件的广播(观察者模式)

一、事件广播(一个事件发布者,多个订阅者)

参考

https://www.runoob.com/csharp/csharp-event.html

https://www.cnblogs.com/gq0324/p/8177799.html

https://www.cnblogs.com/MuNet/p/8544954.html

#region 事件(一个事件发布者,多个订阅者)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace QueueSample
{
    /***********发布器类***********/
    public class EventTest
    {
        private int value;

        public delegate void NumManipulationHandler();
        public event NumManipulationHandler ChangeNum;
        protected virtual void OnNumChanged()
        {
            if (ChangeNum != null)
            {
                ChangeNum(); /* 事件被触发 */
            }
            else
            {
                Console.WriteLine("event not fire");
            }
        }


        public EventTest()
        {
            string str= null;
            SetValue(str);
        }


        public void SetValue(string str)
        {
            if (str != null && str == "触发所有事件")
            {
                OnNumChanged();
            }
        }
    }

    /***********订阅器类***********/
    public class subscribEvent1
    {
        public void printf1()
        {
            Console.WriteLine("event fire111111");
            //Console.ReadKey(); /* 回车继续 */
        }
    }
    public class subscribEvent2
    {
        public void printf2()
        {
            Console.WriteLine("event fire2222222");
            //Console.ReadKey(); /* 回车继续 */
        }
    }

    public class subscribEvent3
    {
        public void printf3()
        {
            Console.WriteLine("event fire3333333");
            //Console.ReadKey(); /* 回车继续 */
        }
    }



    /***********触发***********/
    class Program
    {

        static void Main(string[] args)
        {
            EventTest e = new EventTest(); //实例化事件发布者
            subscribEvent1 v1 = new subscribEvent1(); //实例化事件订阅者1
            subscribEvent2 v2 = new subscribEvent2(); //实例化事件订阅者2
            subscribEvent3 v3 = new subscribEvent3(); //实例化事件订阅者3
            e.ChangeNum += new EventTest.NumManipulationHandler(v1.printf1); //订阅事件或者说是注册事件
            e.ChangeNum += new EventTest.NumManipulationHandler(v2.printf2); //订阅事件或者说是注册事件
            e.ChangeNum += new EventTest.NumManipulationHandler(v3.printf3); //订阅事件或者说是注册事件
            e.SetValue("触发所有事件");//引发事件或者说是触发事件
            Console.ReadLine();
        }

    }
}
#endregion

控制台输出结果:

event fire111111
event fire2222222
event fire3333333

 

 

 

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值