C#-多播委托
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
还有一点,如果将委托实例所引用的方法全部去掉,再执行 委托实例() 会抛出空值异常:

漫思

浙公网安备 33010602011771号