1. 程式人生 > >C#中的委托 delegate

C#中的委托 delegate

mat string word args lin spa [] 沒有 ron

委托 也叫代表,代表一類方法。而這一類方法都具有相同的 修飾符、形參以及 返回值類型

1. 委托 既是方法,聲明委托的方式如下:在修飾符後加上 delegate [‘d?l?ɡ?t]關鍵字

1 public delegate void Del(string message);

從格式上看,它與方法的聲明極為相似,就是多了個 delegate關鍵字而已。它表示聲明了一類,修飾符為public、一個string類型形參的、沒有返回值的方法。

2. 但 委托 不是普通的方法,因為 它也是類, 所以委托只能聲明,而不能定義,如不能這樣寫:

private delegate void Doing(
string name){ System.Windows.MessageBox.Show(); }

3. 實例化委托,調用委托

 1 //聲明一個void, 形參是string的委托
 2 public delegate void Del(string name);
 3  
 4 //定義一個cut方法
 5 public void cut(string name)
 6 {
 7        System.Windows.MessageBox.Show("fuck " + name);
 8 }
 9 //實例化委托,傳的參數是一個方法的名字,這裏是cut
10 Del a = new
Del(cut); 11 a("CCC");//調用委托,相當於調用cut("CCC");

4. 委托 有什麽用,搞這麽復雜有什麽意思

將方法名作為方法參數傳遞,提高代碼的多變性和靈活性; 委托 主要用於事件 還有回調函數中····

5. 委托 的多播 (Multicasting of a Delegate) 操作"+="、"-="

 1 using System;
 2  
 3 delegate int NumberChanger(int n);
 4 namespace DelegateAppl
 5 {
 6    class TestDelegate
 7    {
 8
static int num = 10; 9 public static int AddNum(int p) 10 { 11 num += p; 12 return num; 13 } 14 15 public static int MultNum(int q) 16 { 17 num *= q; 18 return num; 19 } 20 public static int getNum() 21 { 22 return num; 23 } 24 25 static void Main(string[] args) 26 { 27 // 創建委托實例 28 NumberChanger nc; 29 NumberChanger nc1 = new NumberChanger(AddNum); 30 NumberChanger nc2 = new NumberChanger(MultNum); 31 nc = nc1; 32 nc += nc2;//到這裏,nc其實綁定了2個委托,調用時會按綁定的順序執行 33 // 調用多播 34 nc(5); 35 Console.WriteLine("Value of Num: {0}", getNum()); 36 Console.ReadKey(); 37 } 38 } 39 }

註意:委托對象可使用 "+=" 運算符進行合並。一個合並委托調用它所合並的兩個委托。只有相同類型的委托可被合並。

"-=" 運算符可用於從合並的委托中移除組件委托。

*****************************************************
*** No matter how far you go, looking back is also necessary. ***
*****************************************************

C#中的委托 delegate