C# Closure ?
JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。
在这之前,我们必须先知道如何在C#中定义函数
1 //函数定义,参数为string,返回为string 2 Func<string, string> myFunc = delegate(string msg) 3 { 4 return "Msg:" + msg; 5 };
利用Lambda表达式也可以简化上述的代码,但是效果一样:
1 //Lambda 2 Func<string, string> myFuncSame = msg => "Msg:" + msg;
定义好函数后,可以进行调用:
1 //函数调用 2 string message= myFuncSame("Hello world");
定义一个带外部变量(相对于内嵌函数而言)的嵌套函数,外部函数将内部嵌套的函数进行返回:
1 public static Func<int, int> Func() 2 { 3 var myVar = 1; 4 Func<int, int> inc = delegate(int var1) 5 { 6 //myVar能够记录上一次调用后的状态(值) 7 myVar = myVar + 1; 8 return var1 + myVar; 9 }; 10 return inc; 11 }
C# Closure调用如下所示:
1 static void CsharpClosures() 2 { 3 var inc = Func(); 4 Console.WriteLine(inc(5));//7 5 Console.WriteLine(inc(6));//9 6 }
当第二次调用inc(6)时,此时函数内变量myVar并未像第一次调用函数时进行重新初始化(var myVar=1),而是保留了第一次运算的值,即 2,因此inc(6)返回的结果为(2+1+6)=9.
水平有限,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注!
出处:http://www.cnblogs.com/isaboy/
出处:http://www.cnblogs.com/isaboy/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步