zoukankan      html  css  js  c++  java
  • C# 多播委托 注意事项

    委托的基本概念就不说了,我先简单说一下什么是多播委托。

    包含多个方法的委托就是多播委托

    简单地举了例子:

    delegate void MyDelegate();
    
            static void Main(string[] args)
            {
    
                MyDelegate my1 = Write;
    
                my1 += Read;
    
                Console.ReadLine();
            }
    
            static void Write() 
            {
                Console.WriteLine("Write this is using named method");
            }
    
            static void Read()
            {
                Console.WriteLine("Read this is using named method");
            }

    多播委托识别"+","+=","-","-=" 运算符,以从委托中删除或添加方法调用。

    多播委托实际上就是多个委托的集合,如果在实行多播委托时,其中一个方法抛出异常,那么整个迭代都会停止。

           delegate void MyDelegate();
    
            static void Main(string[] args)
            {
                try
                {
                    MyDelegate my1 = Write;
                    my1 += Read;
                    my1();
                }
                catch(Exception) 
                {
                    Console.WriteLine("Error caught");
                }
    
                Console.ReadLine();
            }
    
            static void Write() 
            {
                Console.WriteLine("Write this is using named method");
                throw new Exception("Err in Write");
            }
    
            static void Read()
            {
                Console.WriteLine("Read this is using named method");
                throw new Exception("Err in Read");
            }

    得到的结果是:

    Write this is using named method

    Error caught

    为了避免这种方法,需要自己迭代列表。下面是修改后的代码

            delegate void MyDelegate();
    
            static void Main(string[] args)
            {
               
                MyDelegate my1 = Write;
                my1 += Read;
    
                Delegate[] dls = my1.GetInvocationList();
    
                foreach (MyDelegate dl in dls)
                {
                    try
                    {
                        dl();
                    }
                    catch(Exception)
                    {
                        Console.WriteLine("Error caught");
                    }
                }
    
                Console.ReadLine();
            }
    
            static void Write() 
            {
                Console.WriteLine("Write this is using named method");
                throw new Exception("Err in Write");
            }
    
            static void Read()
            {
                Console.WriteLine("Read this is using named method");
                throw new Exception("Err in Read");
            }

    得到的结果是:

    Write this is using named method

    Error caught

    Read this is using named method

    Error caught

  • 相关阅读:
    LR十九:Analysis 图标分析
    Llinux:mysql的安装教程
    Jmeter28:linux下实现压测-html报表生成-控制台参数优化
    Llinux:自动分配ip的方法
    Llinux:环境变量的配置-java-JMETER
    if _ else if _ else,case,程序逻辑判断- java基础
    LR十八:Controller组件- 集合点的功能-loadrunner
    LR十七:Controller
    Jmeter27:TCP_协议_socket接口
    LR十六:socket_tcp协议_loadrunner测试
  • 原文地址:https://www.cnblogs.com/nonkicat/p/2796656.html
Copyright © 2011-2022 走看看