首页 > 编程语言 >C#-多播委托

C#-多播委托

时间:2024-07-19 18:18:29浏览次数:8  
标签:myaction 多播 委托 C# void static 方法

C#-多播委托

 

昨天第一次学到了多播委托,记录一下最简单的用法。

顾名思义,多播委托就像广播一样,由一个委托实例引用多个方法。通过 +=和-= 运算符实现对引用方法的增加和减少。

复制代码
 1         static void Main(string[] args)
 2         {
 3             Action myaction = test1;
 4             myaction += test2;
 5             myaction += test3;
 6             myaction();
 7             myaction -= test2;
 8             Console.WriteLine("-------------------");
 9             myaction();
10         }
11         public static void test1()
12         {
13             Console.WriteLine("func1");
14         }
15         public static void test2()
16         {
17             Console.WriteLine("func2");
18         }
19         public static void test3()
20         {
21             Console.WriteLine("func3");
22         }
23         /*
24          *  func1
25             func2
26             func3
27             -------------------
28             func1
29             func3
30          */
复制代码

当按  委托实例()  的方法调用它所引用的方法时,会按照引用的先后顺序依次条用所有方法。如果在调用时其中一个方法出现异常,那么其后的所有方法都会停止调用。

另外,也可通过 GetInvocationList() 方法拿到委托实例所引用的方法的列表,从而进行进一步的操作,这个方法的描述为:“按照调用顺序返回此多路广播委托的调用列表”

复制代码
 1         static void Main(string[] args)
 2         {
 3             Action myaction = test1;
 4             myaction += test2;
 5             myaction += test3;
 6             Delegate[] delegates = myaction.GetInvocationList();
 7             foreach(Delegate de in delegates)
 8             {
 9                 de.DynamicInvoke();
10             }
11         }
12         //func1
13         //func2
14         //func3
复制代码

还有一点,如果将委托实例所引用的方法全部去掉,再执行 委托实例() 会抛出空值异常:

标签:myaction,多播,委托,C#,void,static,方法
From: https://www.cnblogs.com/sexintercourse/p/18312099

相关文章

  • Crowdstrike 更新导致全球 Windows 大面积蓝屏死机
    Crowdstrike更新导致全球Windows大面积蓝屏死机来源:OSCHINA编辑: 局2024-07-1914:14:00 8外媒报道称,许多Windows用户在最近的CrowdStrike更新后遇到了蓝屏死机(BSOD)错误。该问题似乎很普遍,影响运行不同CrowdStrike版本的机器。在社交媒体上,全球......
  • C#-Func<>
    C#-Func<> 与C#-Action十分相似, Func<> 也是c#内置的委托类型,不同的是, Func<> 只能用来引用具有返回值的方法,也就是说,在使用它时,至少需要在尖括号内指定一种类型,当仅指定一种类型时,表示引用具有返回值但没有参数的方法,当指定多种类型时,其中最后一个类型表示返回值类型,前......
  • paddleocr识别并按行输出结果
    frompaddleocrimportPaddleOCR#初始化OCR引擎ocr=PaddleOCR(use_angle_cls=True,lang="ch")#使用中文模型#对图像进行OCR识别img_path='./imgs/img_3.png'result=ocr.ocr(img_path,cls=True)#按y坐标对文本块进行排序sorted_result=sorted(result,......
  • ECU通讯:CAN总线仿真测试
    01.ECU在软件定义汽车的大背景下,几乎每一个汽车功能都需要依靠ECU(ElectronicControlUnit,电子控制单元)来实现:有些功能靠ECU独立实现,有些功能则需要多个ECU联合实现。总体来说,ECU绝大多数情况下都需要与其他ECU进行信息交互,比如充电功能就需要车载充电机OBC(On-BoardCharger)联合......
  • Facebook 开源 C++ 框架 Ocean:用于计算机视觉和增强现实
    Facebook开源C++框架Ocean:用于计算机视觉和增强现实来源:OSCHINA编辑: 局2024-07-1211:05:00 0Facebook开源了其内部用于计算机视觉(CV)和增强现实(AR) 应用程序的框架Ocean,用于执行各种任务,包括计算机视觉、几何、媒体处理、网络和渲染。Ocean......
  • 蚂蚁集团开源 EchoMimic:支持为人像照片对口型、生成肖像动画视频
    蚂蚁集团开源EchoMimic:支持为人像照片对口型、生成肖像动画视频来源:投稿作者: 菠萝的海子2024-07-1211:22:00 2蚂蚁集团发布了开源项目EchoMimic。据介绍,EchoMimic不仅能根据人像面部特征和音频来帮人物对口型,还可以结合面部标志点和音频内容生成较为稳定......
  • OpenCV ----像素距离与连通域
    文章目录一.图像像素距离变换1.常用距离的三种定义:(1)欧式距离-----DIST_L2(2)街区距离-----DIST_L1(3)棋盘距离------DIST_C2.distanceTransform()------距离转换函数(1)函数原型(2)运用演示二.图像连通域(1)定义(2)邻域(3)标记连通域函数-----connectedComponents()(3)connecte......
  • JavaScript 基础知识 Day01
    一、计算机基础知识1、计算机数据存储单位位(Bit):1bit可以保存一个0或者1(最小的存储单位)字节(Byte):1B=8b千字节(KB):1KB=1024B兆字节(MB):1MB=1024KB吉字节(GB):1GB=1024MB太字节(TB):1TB=1024GB2、关于JavaScript 它是在1952年2月由网景开......
  • RocketMQ实现黑马点评优惠卷下单
    背景在现代电商系统中,秒杀活动因其高并发、高负载的特点,对系统的稳定性和性能要求极高。为了有效地处理秒杀活动中的高并发请求,消息队列成为了一个重要的解决方案。本文将介绍如何使用RocketMQ来实现秒杀下单的功能。目标通过RocketMQ来实现一个秒杀订单的处理流程,保证在......
  • bootstrap-datetimepicker设置时分
    bootstrap-datetimepicker设置时分需求背景时分年月日需求背景在日常工作中遇到一个业务场景,需要时间控件来选择时分,但是不需要年月日的成分,实现之后的效果如图那么下面就开始查找相关的时间控件插件,这里示例图中用到的是bootstrap-datetimepicker时间控件时分......