第一次在編程語言中接觸委托,感覺很是生疏。敲了幾個例子自後,發現其實在面向對象語言中的委托和我們現實生活中是一樣的。比如說,小紅需要去銀行取錢,這裡取錢就是小紅這一個對象的方法。同樣如果是小明,他也可以有取錢這一個方法。如果小紅由於一些事情讓小明替她去取錢,在這裡就是委托了。也就是小明以小紅的名義去取錢,執行同樣的方法。
在C#中,委托派生於基類System.Delegate,不過委托的定義和常規的定義方法不太一樣,委托通過關鍵字delegate來定義:
public delegate void myDelegate(int x,int y)
上面的代碼定義了一個新委托,它可以封裝任何返回為int,帶有兩個int參數的方法,任何一個方法無論是實例方法還是靜態方法,只要他們的簽名(參數類型在一個方法中的順序)和定義的委托是一樣的,都可以把他們封裝到委托中去。
下面我們來看一個具體的例子吧:
為了方便理解,我在這裡就聲明具體的類了。
public delegate void GetMoney(string name);//定義委托 class Example2 { public static void getCCBmoney(string name) { Console.WriteLine("去建行取錢!"); } public static void getABCmoney(string name) { Console.WriteLine("去農行取錢!"); } static void Main(string[] agrs) { GetMoney gm; gm = getABCmoney;//委托實例化,或者可以寫成GetMoney gm=new GetMoney(getABCmoney) gm("小紅"); } }
輸出結果如下:
從上面的例子中我們可以總結出:委托是一個類,它定義了方法的類型,可以把方法當作參數來進行傳遞,這種動態的賦給參數的做法,可以大大提高程序的擴展性。