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 }