多播委托
/* 多播委托 */ using System; namespace Frank { public class Test { public static void Main(string[] args) { Action<double> operations = MathOperations.MultiplyByTwo; operations += MathOperations.Square; ProcessAndDisplayNumber(operations,20.00);//一次执行多个方法,如果一个方法抛出了异常,那么后面的方法就不会被执行。 //为了避免方法抛出异常从而使方法停止迭代的情况可以使用Delegate来执行 Action operations2 = MathOperations.MultiplyByTwo; operations2 += MathOperations.Square; Delegate[] delegates = operations2.GetInvocationList(); foreach(Action item in delegates) { try { item.Invoke(); } catch (Exception e) { System.Console.WriteLine(e.Message);//抛出异常后后面的方法一样继续执行。 } } } public static void ProcessAndDisplayNumber(Action<double> action,double value) { Console.WriteLine(); Console.WriteLine("value:{0}",value); action.Invoke(value); } } public class MathOperations { public static void MultiplyByTwo(double value) { double result = value * 2; Console.WriteLine("MultiplyByTwo:" + result); } public static void MultiplyByTwo() { double result = 1.10; Console.WriteLine("MultiplyByTwo:" + result); throw new Exception("错误!"); } public static void Square(double value) { double result = value * value; Console.WriteLine("Square:"+result); } public static void Square() { double result = 2.01; Console.WriteLine("Square:"+result); } } }