多播委托——MulticastDelegate

2023-12-24 05:18

本文主要是介绍多播委托——MulticastDelegate,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多播委托(MulticastDelegate)继承自Delegate,表示多路广播委托;其调用列表中可以拥有多个元素的委托。实际上,我们自定义的委托的基类就是MulticastDelegate。

委托可以表示静态方法或实例方法。当委托表示实例方法时,委托不仅存储对方法入口点的引用,还存储对类实例的引用。与函数指针不同,委托是面向对象和类型安全的。

多播委托具有一个带有链接的委托列表,称为调用列表,在对委托实例进行调用的时候,将按列表中的委托顺序进行同步调用。

在实际应用中,如果我们要改变通常的事件广播的方式时,就需要应用这一特性了。比如通常我们都是这样触发一个事件广播:方法 MyEventMethod1 和 MyEventMethod2 将先后被调用,如果委托具有返回值,执行委托后获取的只是最后一个方法的返回值。

但如果我们需要获得所有方法的返回值该怎么办?

还有,假如在调用MyEventMethod1时方法内部抛出异常,这将导致后面的方法无法得到执行。那我们如果要求不管被调用的方法无论是否抛出错误,都要保证列表中的所有方法必须得到调用,那该怎么办?


针对这两种场景,我们就得自己实现对多播委托的调用列表中的每个委托进行逐个调用了。

Delegate 的API中提供了一个方法供我们获得调用列表:

//事件触发代码public delegate string MyEventHandle(string name);public static event MyEventHandle MyEvent;static void Main(string[] args)
{MyEvent += new MyEventHandle(MyEventMethod1);MyEvent += new MyEventHandle(MyEventMethod2);MyEvent("John");
}
Delegate[] delegList = MyEvent.GetInvocationList();
List<string> resultList = new List<string>();
foreach (MyEventHandle del in delgtList)
{try{resultList.Add(del("John"));}catch (Exception ex){//异常处理;}
}

 

这篇关于多播委托——MulticastDelegate的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530649

相关文章

网络层 VII(IP多播、移动IP)【★★★★★★】

一、IP 多播 1. 多播的概念 多播是让源主机一次发送的单个分组可以抵达用一个组地址标识的若干目的主机,即一对多的通信。在互联网上进行的多播,称为 IP 多播(multicast , 以前曾译为组播)。 与单播相比,在一对多的通信中,多播可大大节约网络资源。假设视频服务器向 90 台主机传送同样的视频节目,单播与多播的比较如下图所示。 下图(a)是视频服务器用单播方式向 90 台主机传

WebAPI(二)、DOM事件监听、事件对象event、事件流、事件委托、页面加载与滚动事件、页面尺寸事件

文章目录 一、 DOM事件1. 事件监听2. 事件类型(1)、鼠标事件(2)、焦点事件(3)、键盘事件(4)、文本事件 3. 事件对象(1)、获取事件对象(2)、事件对象常用属性 4. 环境对象 this5. 回调函数 二、 DOM事件进阶1. 事件流(1)、 捕获阶段(2)、 冒泡阶段(3)、 阻止冒泡(4) 、阻止元素默认行为(5) 、解绑事件 2. 事件委托3. 其他事件(1)、页面加

单播、广播、多播

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在? 1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上

Java类加载器双亲委托模型概述

类加载器的双亲委派模型 模型图 加载原理 双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。 实现代码 先检

浅谈C#委托

一、基本介绍 委托是一种引用类型,它表示对方法的引用,即委托就是一种用来指向一个方法的引用类型变量。 委托(Delegate)是一种特殊的类型,它定义了方法的类型,使得可以将方法作为参数传递,或者将其赋值给变量。委托是实现事件和回调方法的基础。 二、基本使用 定义委托类型:首先,你需要定义一个委托类型,指定它可以接受的方法的签名。 public delegate int Op

【Java设计模式】委托模式:掌握高效任务分配

文章目录 【Java设计模式】委托模式:掌握高效任务分配一、概述二、详细解释及实际示例三、Java中委托模式的编程示例四、何时在Java中使用委托模式五、委托模式在Java中的实际应用六、委托模式的优点和权衡七、源码下载 【Java设计模式】委托模式:掌握高效任务分配 一、概述 委托模式的目的是允许一个对象将任务的责任委托给另一个辅助对象。 二、详细解释及实际示例 实际示

C#笔记4 详细解释事件及其原型、匿名方法和委托的关系

匿名方法 定义 匿名方法允许一个与委托关联的代码被内联的写入使用委托的位置。 语法形式 delegate(参数列表){代码块} 前文说过,委托是定义了一个公司,公司专门承接某一类型的任务。 委托的实例化就是公司把任务交给了具体的职员(方法)。 委托可以多播,公司可以同时让两个职员来服务客户。 匿名方法就是一个临时职员,这个职员不用提前招聘,只是临时取用,所以直接出现在代码里临时

C++实现事件委托delegate

一、概述 用C++做项目的时候,尤其是写客户端的时候经常会有事件回调的设计,一般的方式是使用虚函数表,用一个虚基类包含一系列的回调函数。但这种方式和C++11的lamda不兼容,为了更方便的实现事件回调机制,使用delegate是很不错的一种方式。 二、源码 参考了duilib的CDelegate和C#的Deleagte<T>得出如下实现: https://download.csdn.ne

C# 委托详解(Delegate)

引言 在 C# 编程当中,委托(Delegate)是一种特殊的类型,它允许将方法作为参数传递给其他方法,或者将方法作为返回值返回,这种特性使得委托成为实现回调函数、事件处理等,所有的委托都派生自System.Delegate类。 C#中的委托类似于C 或 C++中函数的指针。委托是存在对某个方法的引用的一种引用类型变量,引用可以在运行的时候被打断,当事件出现,就必然有委托的影子,而有委托的时候

Objective-C 委托、非正式协议、正式协议

Objective-C 委托、非正式协议、正式协议 一、概念: 1、委托(delegate,也叫代理):当一个对象接受到某个事件或者通知的时候,会向它的Delegate对象查询它是否能够响应这个事件或者通知,如果可以,这个对象就会给它的Delegate对象发送一个消息(执行一个方法调用)。在这种机制下,您可以不进行子类化和方法重载,而是将自己的定制代码放到委托对象中,从而避免对复杂