C# 事件

  • 113
  • 0

C# 事件介紹

C#事件的理論不算難懂,但是在程式碼的執行順序很容易搞混。

事件是延續委派的作法,算是進階。

事件的主軸就是觀察者訂閱被觀察者,之後被觀察者一旦產生狀況就會通知觀察者,觀察者就會執行註冊的方法。

舉例:手機只要安裝app,一旦該app有更新。GooglePlay就會產生通知,問你要不要更新。

公司來了個正妹同事,男同事們開始FB IG追蹤正妹。一旦正妹po出穩定交往的動態,男同事們就會開始哀號;但如果po出回復單身狀態,男同事們就會開心。

程式碼執行的順序就是

  1. 被觀察者的delegate會加載至被觀察者的event中並傳入觀察者的A方法(注意:觀察者不一定只有一個,可以多個)。
  2. 被觀察者一執行事件,觀察者就會各自執行方法A。

就用上面男女同事來做舉例吧

男同事程式碼

class maleColleage
    {
        private string clientName;
        public maleColleage(string name)
        {
            clientName = name;
        }
        public void order()
        {
            beautyGirl.sendMsg += new beautyGirl.Mssage(reciMsg);
        }

        public void reciMsg(string ss)
        {
            Console.WriteLine(clientName + "說 : Oh~~no 竟然穩定交往了");
        }
	}

女同事端程式碼

class beautyGirl
    {
        public delegate void Mssage(String say);
        public static event Mssage sendMsg;
        public string name;

        public beautyGirl(string name)
        {
            this.name = name;
        }

        public void brocast(string s)
        {
            Console.WriteLine( this.name+s); //這一行才輸出"女同事穩定交往中"
            if (sendMsg != null)
                sendMsg(s);
            
        }
	}

執行的程式碼

class Program
    {
        
        static void Main(string[] args)
        {
            beautyGirl s = new beautyGirl("女同事");
            maleColleage c = new maleColleage("同事A");
            c.order();  ///追蹤女同事
            s.brocast("穩定交往中"); //這一行執行事件,但沒有執行輸出文字"女同事穩定交往中"哦
            Console.ReadLine();
        }
    }

輸出畫面