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