您的位置:首页 > 编程语言 > C#

如何创建C# Closure ?

2016-01-06 16:32 519 查看
  JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?www.zkzlyy.com C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。
  在这之前,我们必须先知道如何在C#中定义函数

1  //函数定义,参数为string,返回为string
2 Func<string, string> myFunc = delegate(string msg)
3 {
4       return "Msg:" + msg;
5 };//www.zkzlyy.com


  利用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  }//zkzlyy.com


  C# Closure调用如下所示:

1 static void CsharpClosures()
2 {
3     var inc = Func();
4     Console.WriteLine(inc(5));//7 www.zkzlyy.com
5     Console.WriteLine(inc(6));//9
6 }


  当第二次调用inc(6)时,此时函数内变量myVar并未像第一次调用函数时进行重新初始化(var myVar=1 zkzlyy.com),而是保留了第一次运算的值,即 2,因此inc(6)返回的结果为(2+1+6)=9.

水平有限,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注! 

出处:http://www.zkzlyy.com/ 

声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: