首页 > 学院 > 开发设计 > 正文

如何创建C#Closure?

2019-11-14 13:35:40
字体:
来源:转载
供稿:网友

  javaScript中一个重要的概念就是闭包,闭包在Javascript中有大量的应用,但是你知道么?C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。

  在这之前,我们必须先知道如何在C#中定义函数

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

  利用Lambda表达式也可以简化上述的代码,但是效果一样:

1  //Lambda2  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));//75     Console.WriteLine(inc(6));//96 }

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表