javaScript中一个重要的概念就是闭包,闭包在Javascript中有大量的应用,但是你知道么?C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。
在这之前,我们必须先知道如何在C#中定义函数
1//函数定义,参数为string,返回为string2Func<string,string> myFunc =delegate(stringmsg)3{4return"Msg:"+msg;5};
利用Lambda表达式也可以简化上述的代码,但是效果一样:
1//Lambda2Func<string,string> myFuncSame = msg =>"Msg:"+ msg;
定义好函数后,可以进行调用:
1//函数调用2stringmessage= myFuncSame("Hello world");
定义一个带外部变量(相对于内嵌函数而言)的嵌套函数,外部函数将内部嵌套的函数进行返回:
1publicstaticFunc<int,int>Func()2{3varmyVar =1;4Func<int,int> inc =delegate(intvar1)5{6//myVar能够记录上一次调用后的状态(值)7myVar = myVar +1;8returnvar1 +myVar;9};10returninc;11}
C# Closure调用如下所示:
1staticvoidCsharpClosures()2{3varinc =Func();4Console.WriteLine(inc(5));//75Console.WriteLine(inc(6));//96}
当第二次调用inc(6)时,此时函数内变量myVar并未像第一次调用函数时进行重新初始化(var myVar=1),而是保留了第一次运算的值,即 2,因此inc(6)返回的结果为(2+1+6)=9.