通过一个委托调用多个方法可能导致一个大问题,多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法抛出一个异常,整个迭代就会停止

示例如下:Action为无参委托

static void One()
{Console.WriteLine("One");throw new Exception(" Error in one");
}static void Two()
{Console.WriteLine("Two");
}Action d1 = One;
d1 += Two;
try
{d1();
}
catch (Exception)
{Console.WriteLine("Exception caught");
}

委托只调用了第一个方法,因为第一个方法抛出了一个异常,所以委托的迭代会停止,不再调用Two()方法,结果:

One

Exception caught

为了避免这个问题,应自己迭代方法列表,Delegate类定义的GetInvocationList()方法,它返回一个Delegate对象数组,现在可以使用这个委托调用与委托直接相关的方法,

捕获异常,并继续下一次迭代

Action d1 = One;
d1 += Two;Delegate[] delegates = d1.GetInvocationList();
foreach (Action item in delegates)
{try{item();}catch (Exception){Console.WriteLine("Exception caught");}
}

结果如下:

One

Exception caught

Two

转载于:https://www.cnblogs.com/akingyao/archive/2013/01/04/2843737.html

转载-C#委托之多播委托( 二)相关推荐

  1. 委托、多播委托(MulticastDelegate)

    委托.多播委托(MulticastDelegate) 多播委托(MulticastDelegate)继承自 Delegate ,表示多路广播委托:即,其调用列表中可以拥有多个元素的委托.实际上,我们自 ...

  2. C#委托,多播委托,匿名委托,事件

    委托 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 委托是方法的抽象,它存储的就是一系列具有相同签名和返回类型的方法的地址.调用委托的时候,委 ...

  3. C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)

    文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...

  4. 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托

    委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate).   声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...

  5. 第九节:委托和事件(1)(委托的发展历史、插件式编程、多播委托)

    一. 委托的发展历史和基本用法 说起委托,每个人可能都会对他有不同的理解,结合实战中委托的使用,我对其理解是:委托和类一样,是用户的一个自定义类型,委托可以有参数.有返回值,委托的关键字是delega ...

  6. Unreal动态多播委托

    相对于普通多播委托,动态多播委托可以在蓝图中绑定事件.在这里记录一下它的使用方式: 定义动态多播委托类型: 声明委托变量: 绑定函数: 通过Add绑定: 需要定义FScriptDelegate变量: ...

  7. 用boost.signal实现多播委托

    使用boost.signal boost.signal提供了一个多播委托机制,通过它可以非常容易的实现观察者模式: void print_sum(float x, float y)     {     ...

  8. 多播委托(multicast delegate)

    还是老规矩,先看代码:) using System; class MulticastTester {     delegate void Greeting();          public sta ...

  9. 很久没上来写点东西了,今天把N年前的代码看了一遍。随手写了点寄托哀思--多播委托...

    using  System; // 委托类似于C++中的函数指针,不同的是委托可以包含一个顺序的委托集合. // 在C#类型封装中,对于不同类型的单个函数的暴露建议使用委托而不要使用接口. // 委托 ...

最新文章

  1. 国产系统安装安卓应用教程
  2. ML之FE:利用【数据分析+数据处理】算法对国内某平台上海2020年6月份房价数据集【12+1】进行特征工程处理(史上最完整,建议收藏)
  3. 分类模型的评估方法-召回率(Recall)
  4. Qt学习(五):TCP通信
  5. Java学习笔记:Javaweb的服务器介绍
  6. boost::test模块装饰器数据测试用例测试
  7. Unable to find the ncurses libraries的解决办法
  8. 使用ADO.NET的参数集合来有效防止SQL注入漏洞
  9. 40-400-044-运维-优化-MySQL order by 优化
  10. Myeclipse下使用Maven搭建spring boot项目(第二篇)
  11. 小米air2se耳机只有一边有声音怎么办_别光盯着AirPods,这些无线蓝牙耳机,其实也很好用...
  12. JDK15安装与环境变量配置
  13. 关于数据库、数据仓库、数据湖、数据中台概念和区别
  14. 玩手游神助攻:盘点那些具有游戏宏按键,可自定义按键一键多用的模拟器
  15. 2013职称计算机幻灯片题库,2013职称计算机考试题库宝典及答案解析(全).doc
  16. 国内AGV机器人厂家数目统计及区域分布分析
  17. 路由器管理页面html,小米路由器管理后台(小米AIoT路由器登录管理页面地址)...
  18. 「三代组装」使用Pilon对基因组进行polish
  19. 基于51单片机的十字路口交通红绿灯控制系统仿真原理图方案设计
  20. 小程序手机号码中间四位隐藏

热门文章

  1. eos节点服务器_长期看,EOS柚子能不能达到1000元?
  2. mysql 去重计算公式_mysql多字段去重,并计数
  3. springrain java_springrain
  4. html没有代码补全 vscode_借助clangd实现VSCode C++代码补全
  5. ubuntu16.04 gcc降级到4.8
  6. 【BZOJ4353】Play with tree,树链剖分线段树
  7. 【codevs1316NOIP2012PJ】文化之旅,无题
  8. 【codevs1166】【noip07TG】矩阵取数游戏,新的开始
  9. linux echo 变量 字符串,echo命令 – 输出字符串或提取Shell变量的值 – 运维那些事...
  10. java+oracle数据库锁,数据库学习之Oracle数据库\记录被另一个用户锁住\解决方法...