程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基礎學習之委托的理解和應用,

C#基礎學習之委托的理解和應用,

編輯:C#入門知識

C#基礎學習之委托的理解和應用,


委托的使用和語法定義

委托的使用是由四步來完成的,依次為:聲明委托、創建委托對象、委托關聯方法、調用

我們用一個例子來說明這四步如何操作,我們完成一個老板委托員工寫報告的實例,看如何實現。

首先我們應該定義兩個類,老板類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的存在,

消除了兩者之間的耦合,是不是比傳統的寫法要好很多。

下篇文章我來介紹事件的使用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved