3.C#中的多重委託

閱讀目錄

 一:多重委託概述
   二:多重委託實例

   一:多重委託概述

  1.委託的調用其實是一個調用列表,可以同時調用多個不同的方法
  2.第1個委託加上第2個委託賦予第3個委託,相當於把兩個方法按順序一排,先調用第一個方法,再調用第二個方法
  3.當一個委託列表爲空的時候,對它進行調用會報錯

 二:多重委託實例
 
 我們先寫一個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,我們看到會報錯,因爲當一個委託列表爲空時,對它調用會報錯
   

 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     }

 

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