C#多播委托
如果一个委托变量需要调用多个方法,可食用多播委托进行操作,以简化复杂度。
namespace test
{
class MathOperations
{
public static void MutiplyByTwo(double value)
{
Console.WriteLine("二倍结果为:"+value*2);
}
public static void Square(double value)
{
Console.WriteLine("平方结果为:" + value * value);
}
}
class Program
{
static void Main(string[] args)
{
Action<double> operations = MathOperations.MutiplyByTwo;
operations += MathOperations.Square; //可以对方法进行加减操作,这是多播委托的重要特性
//经过加操作后,实际上把方法加载进一个列表中。执行过程按照列表中的方法顺序执行
operations(2.5); //执行委托的方法,由于多播委托,所以operations中有两个方法排队
Console.ReadLine();
}
public static void ProcessFun(Action<double> action, double value)
{
action(value);
}
}
}
//最后的结果为:二倍的结果为:5 平方的结果为 6.25
多播委托的原理其实就是通过+或+=操作后会生成一个方法的列表,执行过程中会按照这个列表顺序执行完成所有的方法为止。
但是上述的多播委托有个缺点就是,顺序执行列表中的方法时如果有一个方法执行出错,那么后面的都不会执行了。这样可能会导致操作打断。解决这个问题的办法就是在编程的过程中,通过代码将顺序列表中的方法提取出来操作,如下:
Delegate[] delegatess=operations.GetInvocationList(); //获取operations中的列表
foreach (Action<double> dd in delegatess)
{
try
{
dd(2.5);
}
catch (Exception)
{
Console.WriteLine("有错误!");
}
} //通过这种方法即可实现完整执行方法列表中的方法。