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.在事件符合條件時,調用事件

結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章