C#多播委托

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("有错误!");
      }
  }   //通过这种方法即可实现完整执行方法列表中的方法。
发布了51 篇原创文章 · 获赞 0 · 访问量 874

猜你喜欢

转载自blog.csdn.net/weixin_40786497/article/details/104032390
今日推荐