C#基础 概念之委托,事件(面试:猫叫了,老鼠跑了主人醒了 )其一:初探

.net 委托,事件(面试:猫叫了,老鼠跑了主人醒了 )其一
.net 委托,事件(面试:猫叫了,老鼠跑了主人醒了 )其二
.net 委托,事件(面试:猫叫了,老鼠跑了主人醒了 )其三

源代码

事件

事件基于委托,为委托提供了一种发布/订阅机制(观察者模式)
事件必须包含三部分:
事件的订阅者
事件的触发者/发布者
订阅者和触发者之间的数据传输通道

事件(event)的本质:事件本身其实就是一个委托链

问题:猫叫了一声,老鼠们跑了,主人醒了

事件初探

订阅者
用于在事件触发后,做出对应的响应行为
此处传入的ifCatMiao就是事件的结果,WakeUp就是响应行为

    /// <summary>
    /// 订阅者 老鼠
    /// </summary>
    public class Master
    {
        public void WakeUp(bool ifCatMiao)
        {
            System.Diagnostics.Debug.WriteLine("主人醒了");
        }
    }

    /// <summary>
    /// 订阅者 主人
    /// </summary>
    public class Mouse
    {
        public void RunAway(bool ifCatMiao)
        {
            System.Diagnostics.Debug.WriteLine("老鼠跑");
        }
    }

发布者
此处发布者只是做了对应的事件

    /// <summary>
    /// 普通猫,把要干的事情放在主程序上,Index
    /// </summary>
    public class Cat
    {
        public bool Miao()
        {
            System.Diagnostics.Debug.WriteLine("猫叫了");
            return true;
        }
    }

通道

    public class CatEventController : Controller
    {
    
    	//此处委托的标签(传参和回参)与订阅者的标签必须一致
        public delegate void IfMiaoHandler(bool ifCatMiao);

        public static event IfMiaoHandler IfMiao;

        public void  Index()
        {
            var mouses = new List<Mouse>() { new Mouse(), new Mouse(), new Mouse() };

            var master = new Master();

            var cat = new Cat();
            //添加老鼠的逃跑
            foreach (var mouse in mouses)
            {
                IfMiao += mouse.RunAway;
            }

            //添加主任的惊醒
            IfMiao += master.WakeUp;
            //激发事件
            IfMiao(new Cat().Miao());
        }

由以上代码可知,使用事件的步骤需要
1.声明订阅者
2.声明发布者
3.声明委托及事件(事件基于委托)
4.为事件增加订阅者
5.在事件符合条件时,调用事件

结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值