在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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. |
请发表评论