標籤:assets svg 編程 sharp toc bar lin mic clip
第一次在程式設計語言中接觸委託,感覺很是生疏。敲了幾個例子自後,發現其實在物件導向語言中的委託和我們現實生活中是一樣的。比如說,小紅需要去銀行取錢,這裡取錢就是小紅這一個對象的方法。同樣如果是小明,他也可以有取錢這一個方法。如果小紅由於一些事情讓小明替她去取錢,在這裡就是委託了。也就是小明以小紅的名義去取錢,執行同樣的方法。
在C#中,委託派生於基類System.Delegate,不過委託的定義和常規的定義方法不太一樣,委託通過關鍵字delegate來定義:
public delegate void myDelegate(int x,int y)
上面的代碼定義了一個新委託,它可以封裝任何返回為int,帶有兩個int參數的方法,任何一個方法無論是執行個體方法還是靜態方法,只要他們的簽名(參數類型在一個方法中的順序)和定義的委託是一樣的,都可以把他們封裝到委託中去。
下面我們來看一個具體的例子吧:
為了方便理解,我在這裡就聲明具體的類了。
[csharp] view plain copy
- <span style="font-family:Microsoft YaHei;font-size:18px;"> 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("小紅");
- }
- }</span>
輸出結果如下:
從上面的例子中我們可以總結出:委託是一個類,它定義了方法的類型,可以把方法當作參數來進行傳遞,這種動態賦給參數的做法,可以大大提高程式的擴充性。
C#中的委託