C# 中的委托和事件
2013-04-17 14:16 Evan.Pei 阅读(135) 评论(0) 编辑 收藏 举报个人理解: 委托有点枚举的感觉,将方法当成参数传递,扩展时添加新方法即可,省掉多余的判断。
例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using System; using System.Collections.Generic; using System.Text; namespace Delegate { //定义委托,它定义了可以代表的方法的类型 public delegate void GreetingDelegate( string name); class Program { private static void EnglishGreeting( string name) { Console.WriteLine( "Morning, " + name); } private static void ChineseGreeting( string name) { Console.WriteLine( "早上好, " + name); } //注意此方法,它接受一个GreetingDelegate类型的方法作为参数 private static void GreetPeople( string name, GreetingDelegate MakeGreeting) { MakeGreeting(name); } static void Main( string [] args) { GreetPeople( "Jimmy Zhang" , EnglishGreeting); GreetPeople( "张子阳" , ChineseGreeting); Console.ReadKey(); } } } |
输出如下:
Morning,JimmyZhang
早上好,张子阳
我们现在对委托做一个总结:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If- Else(Switch)语句,同时使得程序具有更好的可扩展性。
将方法绑定到委托
1 2 3 4 5 6 7 8 9 10 11 | static void Main( string [] args) { GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting); delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法 // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 GreetPeople( "Jimmy Zhang" , delegate1); Console.WriteLine(); delegate1 -= EnglishGreeting; //取消对EnglishGreeting方法的绑定 // 将仅调用 ChineseGreeting GreetPeople( "张子阳" , delegate1); Console.ReadKey(); } |
输出为:
Morning,JimmyZhang
早上好,JimmyZhang
早上好,张子阳
让我们再次对委托作个总结:
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构