C#-多播委托

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
复制代码
复制代码

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

posted on   漫思  阅读(34)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2022-07-19 拍下宇宙的韦伯空间望远镜,其飞行软件采用 C++ 编写、内置定制的 JS 解释器
2022-07-19 Hype 4.0(Mac系统)的布局功能
2022-07-19 Immer 入门
2022-07-19 设计克制
2022-07-19 adobe工具软件应用
2022-07-19 高性能动画的
2022-07-19 RN Weex的超过100片

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示