淺談對委託的理解--c#

    這幾天看完了C# 視頻,其中的一些基礎知識,繼承,接口,多態等等一些理解的還可以,但是又接觸到了一個新的詞----委託。對此理解的不是很好,在經過深入的查找和學習一些資料後,寫下自己的一點理解

    什麼是委託?

    生活中:比如說公司老闆出差了,那麼公司的一些事物就需要人來管理,這時候老闆告訴他的祕書在他出差的時間幫助他幹什麼,這就是委託。

    開發中: 委託也可以看成一種數據類型,可以用於定義量,但是它是一種特殊的數據類型,它所定義的變量類型的數值只能是一個函數,更確切的說,委託類型的變量可以接收的數值只能是函數,委託的變量可以接收一個函數的地址,類似於C++語言的函數指針。

   委託關鍵字 

      Delegate 

 

 下面看一個小例子來了解一下委託如何應用到代碼中 

 

 class Program
    {
        static void Main(string[] args)
        {

            MathOptDelegate oppDel; //在Main()方法中定義一個委託類型的變量
            MathOpt obj = new MathOpt();
            oppDel = obj.Add; //給此委託類型賦值
            Console.WriteLine(oppDel(1, 2)); //輸出3

        }
    }
    public class MathOpt
    {
        public int Add(int arg1, int arg2)
        {
            return arg1 + arg2;
        }
    }
    public delegate int MathOptDelegate(int value1,int value2);
    //定義了一個委託數據類型 MathOptDelegate,delegate爲關鍵字

  註釋:  在寫委託這個函數時要注意的兩點

            1. 一定要指明委託的類型是什麼,比如是int 類型 或是其他的  

            2.委託事件的函數名字,一定要和我們類的名字保持一致,例如例子中類名是MathOpt 那麼委託的名字也要是MathOptDelegate. 

     看到這我就想問,爲什麼要這樣實現呢,我完全可以直接調用,根本不用委託就能實現,爲什麼還要通過委託來間接的調用呢?對此也是很不解,查了資料說是使代碼的使用靈活了,有擴展性。

     這只是一個簡單的小例子,假如在開發過程中,我們要實現很多功能,例如要實現對兩個數的加法  減法  乘法  除法等等,如果我們想實現只需要給出兩個數,和你想實現的操作方法,例如減法,那麼我們就要寫很多歌可能性來完成這些操作,這時候委託就派上用場了 

     例如下面的代碼:

     

class Program
    {
        static void Main(string[] args)
        {

            PrintResule(MathOpt.Add, 4, 5);
        }
        public static int PrintResule(MathOptDelegate action, int a, int b)
        {
            int result = action(a, b);
            return result;
        }
    }

    public static class MathOpt
    {
        public static int Add(int arg1, int arg2)
        {
            return arg1 + arg2;
        }
        public static int Sub(int arg1, int arg2)
        {
            return arg1 - arg2;
        }
    }
    public delegate int MathOptDelegate(int value1,int value2);
     通過委託,我們就可以去進行相應的計算了,現在只是初步理解,我想等接觸更大的項目會理解的更好吧  

      下面我在用一個通俗的例子來理解一下

        假如說我們早上要喫包子作爲早飯,那麼我們可能讓爸爸或者媽媽給自己做,那你就會調用 

        爸爸.要包子()  

        媽媽.要包子() 

        返回包子對象。

        但是如果你爸媽不在家的時候,你只能去街上買,問題是你根本不知道街上這些人的名字,那你怎麼調用呢?

        所以你就要用到委託了,委託就是給你一個協定。

        比如delegate包子 要包子();你只需要知道能調用要包子返回一個包子就可以了,根本不需要知道是誰,怎麼給你做的包子,就好象你到大街上買是人家自己做的還是工廠做的還是昨天剩下的你都不清楚。包子店就提供了這樣一個委託,你只需要到包子店調用要包子()就可以拿到包子了

       就像上述例子中,我們不用知道誰去計算,怎麼計算,我們只要發出一個需求,給我計算1+1 給委託,委託就會幫你去完成了,直接返回給你結果。

       總的來說就是:委託適合用在某時或某種情況執行某些事,而這些事你事先並不知道是什麼

    

     更直白一點理解,委託應該就是第三方,調用者告訴第三方要做什麼,然後調用者就不用管了
      這個委託(第三方)就會去調用方法去幫你實現

     委託的好處:
     1.相當於用方法作爲另一方法參數(類似於C的函數指針)
     2.在兩個不能直接調用的方法中作爲橋樑,如:在多線程中的跨線程的方法調用就得用委託
     3.當不知道方法具體實現什麼時使用委託,如:事件中使用委託

      

    

    以上就是我對委託的一點理解,隨着學習的深入還會理解的更深吧!歡迎大家交流指導

       


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章