閱讀目錄spa
一:多重委託概述
二:多重委託實例
一:多重委託概述code
1.委託的調用實際上是一個調用列表,能夠同時調用多個不一樣的方法
2.第1個委託加上第2個委託賦予第3個委託,至關於把兩個方法按順序一排,先調用第一個方法,再調用第二個方法
3.當一個委託列表爲空的時候,對它進行調用會報錯blog
二:多重委託實例
咱們先寫一個Number數字類,這個類裏面有四個方法,分別是加減乘除,第一個委託實例compute1執行的是AddNumber方法,那麼輸出3如深紅色框所示,第二個委託實例computer2執行的是SubNumber方法,那麼輸出的是-1如綠色框所示,第三個委託compute3=compute1+compute2,其實是先調用compute1的AddNumber方法,再調用compute2的SubNumber方法,輸出如紅色框所示,第四個委託compute4先實例化了new Compute(Number.ExceptNumber)ExceptNumber方法,而後第三個委託compute3+=compute4,那麼此時由於上面compute3已經等於compute1+compute2了,這裏又+=了compute4,因此會先調用compute1的AddNumber方法,再調用compute2的SubNumber方法,最後調用compute4的ExceptNumber方法,輸出如黃色框所示,咱們再開始-=,先compute3-=compute4,而後輸出如藍色框所示,咱們在-=compute2,輸出如紫色框所示,compute3只剩下了一個compute1了,也就是AddNumber方法,若是咱們再從compute3-=compute1,咱們看到會報錯,由於當一個委託列表爲空時,對它調用會報錯
string
1 public delegate void Compute(int number1, int number2); 2 class Program 3 { 4 static void Main(string[] args) 5 { 6 Compute compute1 = new Compute(Number.AddNumber); 7 compute1(1, 2); 8 Console.WriteLine(); 9 10 Compute compute2 = new Compute(Number.SubNumber); 11 compute2(1,2); 12 Console.WriteLine(); 13 14 Compute compute3 = compute1 + compute2; 15 compute3(1,2); 16 Console.WriteLine(); 17 18 Compute compute4 = new Compute(Number.ExceptNumber); 19 compute3 += compute4; 20 compute3(1, 2); 21 Console.WriteLine(); 22 23 compute3 -= compute4; 24 compute3(1, 2); 25 Console.WriteLine(); 26 27 compute3 -= compute2; 28 compute3(1, 2); 29 Console.WriteLine(); 30 31 //compute3 -= compute1; 32 //compute3(1, 2); 33 //Console.WriteLine(); 34 35 Console.ReadLine(); 36 } 37 } 38 39 class Number 40 { 41 /// <summary> 42 /// 加法 43 /// </summary> 44 /// <param name="number1"></param> 45 /// <param name="number2"></param> 46 public static void AddNumber(int number1, int number2) 47 { 48 Console.WriteLine("Add number result is {0}", number1 + number2); 49 } 50 51 /// <summary> 52 /// 減法 53 /// </summary> 54 /// <param name="number1"></param> 55 /// <param name="number2"></param> 56 public static void SubNumber(int number1, int number2) 57 { 58 Console.WriteLine("Sub number result is {0}", number1 - number2); 59 } 60 61 /// <summary> 62 /// 乘法 63 /// </summary> 64 /// <param name="number1"></param> 65 /// <param name="number2"></param> 66 public static void MultiNumber(int number1, int number2) 67 { 68 Console.WriteLine("MultiNumber number result is {0}", number1 * number2); 69 } 70 71 /// <summary> 72 /// 除法 73 /// </summary> 74 /// <param name="number1"></param> 75 /// <param name="number2"></param> 76 public static void ExceptNumber(int number1, int number2) 77 { 78 Console.WriteLine("ExceptNumber number result is {0}", number1 / number2); 79 } 80 }