C# 事件介紹
C#事件的理論不算難懂,但是在程式碼的執行順序很容易搞混。
事件是延續委派的作法,算是進階。
事件的主軸就是觀察者訂閱被觀察者,之後被觀察者一旦產生狀況就會通知觀察者,觀察者就會執行註冊的方法。
舉例:手機只要安裝app,一旦該app有更新。GooglePlay就會產生通知,問你要不要更新。
公司來了個正妹同事,男同事們開始FB IG追蹤正妹。一旦正妹po出穩定交往的動態,男同事們就會開始哀號;但如果po出回復單身狀態,男同事們就會開心。
程式碼執行的順序就是
- 被觀察者的delegate會加載至被觀察者的event中並傳入觀察者的A方法(注意:觀察者不一定只有一個,可以多個)。
- 被觀察者一執行事件,觀察者就會各自執行方法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();
}
}
輸出畫面