委托的使用和語法定義
委托的使用是由四步來完成的,依次為:聲明委托、創建委托對象、委托關聯方法、調用
我們用一個例子來說明這四步如何操作,我們完成一個老板委托員工寫報告的實例,看如何實現。
首先我們應該定義兩個類,老板類Boss和員工類Employee,老板委托員工寫報告,其實是老板什麼都沒做,而是告訴員工去做事情(寫報告),
那我們的定義如下
public class Boss { //聲明委托 public delegate void DoWorkEventHandler(string content); //創建委托對象 public DoWorkEventHandler WorkEventHandler; //做事情 public void DoWork(string content) { if (WorkEventHandler != null) { WorkEventHandler.Invoke(content); //或者如下調用 //handler(content); } } }
委托的聲明和創建都是在Boss裡定義的,DoWork內部只是對委托進行了調用,但目前看不出來到底做了什麼事情。
再看員工類的實現
public class Employee { public void DoWork(string content) { Console.WriteLine(string.Format("老板委托我{0}", content)); } }
員工類裡定義了DoWork方法,實現具體做什麼事情
那接下來我們就來看Boss是如何委托給Employee做事情的
public class DelegateExecutor { public static void Run() { Boss boss = new Boss(); string content = "寫報告"; //委托注冊關聯方法 boss.WorkEventHandler = new Boss.DoWorkEventHandler(new Employee().DoWork); // boss.DoWork(content); } }
其實在調用boss.DoWork的時候,內部是委托調用了Employee.DoWork方法。好了,這樣我們最終完成老板委托員工寫報告的功能。
委托的優點
如果我們按照一般的寫法實現以上功能的話,我們可能這樣寫
public class Boss { public void DoWork(string content) { Employee employee = new Employee(); employee.DoWork(content); } }
我們看這樣有個顯著的問題就是Boss和Employee類產生了直接依賴,耦合在了一起,然而使用委托實現的例子中,Boss完全不知道Employee的存在,
消除了兩者之間的耦合,是不是比傳統的寫法要好很多。
下篇文章我來介紹事件的使用