C#委托四(匿名方法)
什么是匿名方法?
匿名方法是C#2.0引入的一个新特性,它允许开发者声明自己的函数代码而无须使用委托函数。
C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称,匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部。也不能在匿名方法外部使用的ref和out参数。
通过使用匿名方法,可以不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。例如,如果创建方法所需的系统开销是不必要的,则指定代码块(而不是委托)可能非常有用。
什么时候该使用匿名方法
1.需要一个临时方法,该方法使用次数极少;
2.这个方法的代码很短,甚至可能比方法声明都短的情况下使用。
下面看一下简单的小例子:
class Program { static void MethodTest( string Test) { Console.WriteLine( "简单方法执行!" ); } /// <summary> /// 声明一个委托,用于实现多播操作 /// </summary> /// <param name="Test"></param> delegate void MyMulticastDelegate( string Test); static void Main( string [] args) { MyMulticastDelegate MyFirst = new MyMulticastDelegate(MethodTest); MyMulticastDelegate multicastDelegate = MyFirst; multicastDelegate( "Test" ); /////////////////////////////////////////////////////// <br> string Test = "test"; MyMulticastDelegate md = new MyMulticastDelegate( delegate ( string Test1) { Console.WriteLine( "简单方法执行!" ); } ); md(Test); Console.Read(); } } |
通过上面代码可以看到,上面是通过委托实现方法调用的,下面的就是通过匿名方法实现的。
查看执行后的效果:
C#3.0之后匿名方法可以使用λ表达式来进行定义
无论是拉姆达(lambda)表达式(匿名函数、是匿名类) ,都能归属到一种叫闭包的东西上面。
左边是参数,使用括号表达 (string param),可以是 (param)这样不定义类型,编译器会推断出来,只有一个参数的时候可以不使用括号。右边是实现代码,使用花括号,如果代码只有一行,则不使用花括号和return关键字也可以,编译器会为我们添加。
这是λ表达式的简单实现↓
/// <summary> /// 声明一个委托,用于实现多播操作 /// </summary> /// <param name="Test"></param> delegate string MyMulticastDelegate( string Test); static void Main( string [] args) { string str1 = "Test1" ; string str2 = "Test2" ; MyMulticastDelegate my = param => param + str1 + str2; MyMulticastDelegate my2 = ( string param) => { return param + str1 + str2; }; Console.WriteLine(my( "Test" )); Console.WriteLine(my2( "aaaa" )); Console.Read(); } |
执行结果为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构