3.C#中的多重委托

Posted 健康-是最好的时光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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     }

 技术分享
技术分享

以上是关于3.C#中的多重委托的主要内容,如果未能解决你的问题,请参考以下文章

扎实基础_设计模式_行为型_观察者模式(项目实战,使用委托注册事情,消除多重判断)

什么是 CORBA 应用程序中的关系委托模型?

对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段

java 代码片段

细数Objective-C中的回调机制

第23条:通过委托与数据源协议进行对象间通信