/*
多播委托
*/
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);
}
}
}