C# 委托的理解和案例
委托是方法的调用,可以更加灵活
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _13 { public class ClassPeople { public void SayChinese(string name) { Console.WriteLine("你好," + name); } public void SayEnglish(string name) { Console.WriteLine("Hello," + name); } public enum Language { English, Chinese } public void DoWork(string name, Language lang) { switch (lang) { case Language.English: SayEnglish(name); break; case Language.Chinese: SayChinese(name); break; } } } class Program { static void Main(string[] args) { ClassPeople cp = new ClassPeople(); cp.DoWork("李天平", ClassPeople.Language.Chinese); cp.DoWork("litianping", ClassPeople.Language.English); System.Console.ReadLine(); } } }
上述代码,根据传进来的语言枚举值和名字符串来输出相应语言的问候语,不过,这个方法的可扩展性太差了,如果以后我们需要再添加韩文版,日文版,就不得不反复修改枚举和Dowork()方法,以适应新的需求。
使用委托可以解决优化此类问题。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _14 { public delegate void SayDelegate(string name); public class ClassPeople { public void SayChinese(string name) { Console.WriteLine("你好," + name); } public void SayEnglish(string name) { Console.WriteLine("Hello," + name); } //注意此方法,它接受一个SayDelegate类型的方法作为参数 public void DoWork(string name, SayDelegate MakeSay) { MakeSay(name); } } class Program { static void Main(string[] args) { ClassPeople cp = new ClassPeople(); cp.DoWork("李天平", cp.SayChinese); cp.DoWork("litianping", cp.SayEnglish); System.Console.ReadLine(); } } }
优化化,我们要加一种问候语,只要新增一个方法就可以了。
参考地址:https://www.cnblogs.com/eagle1986/archive/2012/02/21/2360748.html
标签:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端