我看了一下,感覺它的用處應該就是利用+=( overload)
將所要被呼叫的function註冊(prototype要相同)
存放到一個貯列裡, 當一呼叫該delegate event
便走訪貯列,並呼叫被走訪到且有被註冊的fuunction
這樣的實作可以減少程式碼裡有大量foreach或other loop的存在
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace observer { delegate void EventHandler(); interface Subject { void Notfiy(); string SubjectState { get; set; } } class Boss : Subject { public event EventHandler Update;// 宣告一個delegate event private string action; public void Notfiy() { Update(); } public string SubjectState { get { return action; } set { action = value; } } } class StockObserver { private string name; private Subject sub; public StockObserver(string name, Subject sub) { this.name = name; this.sub = sub; } public void CloseStockMarket() { Console.WriteLine("{0} {1}關閉股票行情,工作!", sub.SubjectState, name); } } class NBAObserver { private string name; private Subject sub; public NBAObserver(string name, Subject sub) { this.name = name; this.sub = sub; } public void CloseNBA() { Console.WriteLine("{0} {1}關閉NBA直播,工作!", sub.SubjectState, name); } } class Program { static void Main(string[] args) { Boss boss = new Boss(); //boss.Update註冊StockObserver.CloseStockMarket boss.Update += new EventHandler((new StockObserver("A",boss)).CloseStockMarket); //boss.Update註冊NBAObserver.CloseNBA boss.Update += new EventHandler((new NBAObserver("B", boss)).CloseNBA); boss.SubjectState = "boss 回來了!"; // 呼叫該delegate event 便可以將所有被註冊的funcion依序執行 boss.Notfiy(); Console.Read(); } } }
0 意見:
張貼留言