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 IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?