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
还有一点,如果将委托实例所引用的方法全部去掉,再执行 委托实例() 会抛出空值异常:
漫思
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.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片