如何创建C#Closure?

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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.

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航