委托的使用和語法定義
委托的使用是由四步來完成的,依次為:聲明委托、創建委托對象、委托關聯方法、調用
我們用一個例子來說明這四步如何操作,我們完成一個老板委托員工寫報告的實例,看如何實現。
首先我們應該定義兩個類,老板類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的存在,
消除了兩者之間的耦合,是不是比傳統的寫法要好很多。
下篇文章我來介紹事件的使用