转载-C#委托之多播委托( 二)
通过一个委托调用多个方法可能导致一个大问题,多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法抛出一个异常,整个迭代就会停止
示例如下: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#委托之多播委托( 二)相关推荐
- 委托、多播委托(MulticastDelegate)
委托.多播委托(MulticastDelegate) 多播委托(MulticastDelegate)继承自 Delegate ,表示多路广播委托:即,其调用列表中可以拥有多个元素的委托.实际上,我们自 ...
- C#委托,多播委托,匿名委托,事件
委托 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 委托是方法的抽象,它存储的就是一系列具有相同签名和返回类型的方法的地址.调用委托的时候,委 ...
- C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)
文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...
- 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托
委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate). 声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...
- 第九节:委托和事件(1)(委托的发展历史、插件式编程、多播委托)
一. 委托的发展历史和基本用法 说起委托,每个人可能都会对他有不同的理解,结合实战中委托的使用,我对其理解是:委托和类一样,是用户的一个自定义类型,委托可以有参数.有返回值,委托的关键字是delega ...
- Unreal动态多播委托
相对于普通多播委托,动态多播委托可以在蓝图中绑定事件.在这里记录一下它的使用方式: 定义动态多播委托类型: 声明委托变量: 绑定函数: 通过Add绑定: 需要定义FScriptDelegate变量: ...
- 用boost.signal实现多播委托
使用boost.signal boost.signal提供了一个多播委托机制,通过它可以非常容易的实现观察者模式: void print_sum(float x, float y) { ...
- 多播委托(multicast delegate)
还是老规矩,先看代码:) using System; class MulticastTester { delegate void Greeting(); public sta ...
- 很久没上来写点东西了,今天把N年前的代码看了一遍。随手写了点寄托哀思--多播委托...
using System; // 委托类似于C++中的函数指针,不同的是委托可以包含一个顺序的委托集合. // 在C#类型封装中,对于不同类型的单个函数的暴露建议使用委托而不要使用接口. // 委托 ...
最新文章
- 国产系统安装安卓应用教程
- ML之FE:利用【数据分析+数据处理】算法对国内某平台上海2020年6月份房价数据集【12+1】进行特征工程处理(史上最完整,建议收藏)
- 分类模型的评估方法-召回率(Recall)
- Qt学习(五):TCP通信
- Java学习笔记:Javaweb的服务器介绍
- boost::test模块装饰器数据测试用例测试
- Unable to find the ncurses libraries的解决办法
- 使用ADO.NET的参数集合来有效防止SQL注入漏洞
- 40-400-044-运维-优化-MySQL order by 优化
- Myeclipse下使用Maven搭建spring boot项目(第二篇)
- 小米air2se耳机只有一边有声音怎么办_别光盯着AirPods,这些无线蓝牙耳机,其实也很好用...
- JDK15安装与环境变量配置
- 关于数据库、数据仓库、数据湖、数据中台概念和区别
- 玩手游神助攻:盘点那些具有游戏宏按键,可自定义按键一键多用的模拟器
- 2013职称计算机幻灯片题库,2013职称计算机考试题库宝典及答案解析(全).doc
- 国内AGV机器人厂家数目统计及区域分布分析
- 路由器管理页面html,小米路由器管理后台(小米AIoT路由器登录管理页面地址)...
- 「三代组装」使用Pilon对基因组进行polish
- 基于51单片机的十字路口交通红绿灯控制系统仿真原理图方案设计
- 小程序手机号码中间四位隐藏
热门文章
- eos节点服务器_长期看,EOS柚子能不能达到1000元?
- mysql 去重计算公式_mysql多字段去重,并计数
- springrain java_springrain
- html没有代码补全 vscode_借助clangd实现VSCode C++代码补全
- ubuntu16.04 gcc降级到4.8
- 【BZOJ4353】Play with tree,树链剖分线段树
- 【codevs1316NOIP2012PJ】文化之旅,无题
- 【codevs1166】【noip07TG】矩阵取数游戏,新的开始
- linux echo 变量 字符串,echo命令 – 输出字符串或提取Shell变量的值 – 运维那些事...
- java+oracle数据库锁,数据库学习之Oracle数据库\记录被另一个用户锁住\解决方法...