C#-多播委托

昨天第一次学到了多播委托,记录一下最简单的用法。

顾名思义,多播委托就像广播一样,由一个委托实例引用多个方法。通过 +=和-= 运算符实现对引用方法的增加和减少。

 1         static void Main(string[] args)
 2         {
 3             Action myaction = test1;
 4             myaction += test2;
 5             myaction += test3;
 6             myaction();
 7             myaction -= test2;
 8             Console.WriteLine("-------------------");
 9             myaction();
10         }
11         public static void test1()
12         {
13             Console.WriteLine("func1");
14         }
15         public static void test2()
16         {
17             Console.WriteLine("func2");
18         }
19         public static void test3()
20         {
21             Console.WriteLine("func3");
22         }
23         /*
24          *  func1
25             func2
26             func3
27             -------------------
28             func1
29             func3
30          */

当按  委托实例()  的方法调用它所引用的方法时,会按照引用的先后顺序依次条用所有方法。如果在调用时其中一个方法出现异常,那么其后的所有方法都会停止调用。

另外,也可通过 GetInvocationList() 方法拿到委托实例所引用的方法的列表,从而进行进一步的操作,这个方法的描述为:“按照调用顺序返回此多路广播委托的调用列表”

 1         static void Main(string[] args)
 2         {
 3             Action myaction = test1;
 4             myaction += test2;
 5             myaction += test3;
 6             Delegate[] delegates = myaction.GetInvocationList();
 7             foreach(Delegate de in delegates)
 8             {
 9                 de.DynamicInvoke();
10             }
11         }
12         //func1
13         //func2
14         //func3

还有一点,如果将委托实例所引用的方法全部去掉,再执行 委托实例() 会抛出空值异常:

 

posted @ 2020-08-05 11:36  闻风听雨  阅读(829)  评论(0编辑  收藏  举报