如何创建C# Closure ?_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 如何创建C# Closure ?

如何创建C# Closure ?

 2017/9/30 12:43:09  浅苍蓝  程序员俱乐部  我要评论(0)
  • 摘要:JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。在这之前,我们必须先知道如何在C#中定义函数//函数定义,参数为string,返回为stringFunc<string,string>myFunc=delegate(stringmsg){return"Msg:"+msg;};利用Lambda表达式也可以简化上述的代码,但是效果一样
  • 标签:C# 创建

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

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

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

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

  //Lambda
 Func<string, string> myFuncSame = msg => "Msg:" + msg;

定义好函数后,可以进行调用:

  //函数调用
  string message= myFuncSame("Hello world");

定义一个带外部变量(相对于内嵌函数而言)的嵌套函数,外部函数将内部嵌套的函数进行返回:

public static Func<int, int> Func()
 {
     var myVar = 1;
     Func<int, int> inc = delegate(int var1)
     {
         //myVar能够记录上一次调用后的状态(值)
         myVar = myVar + 1;
         return var1 + myVar;
     };
     return inc;
 }

C# Closure调用如下所示:

static void CsharpClosures()
 {
     var inc = Func();
     Console.WriteLine(inc(5));//7
     Console.WriteLine(inc(6));//9
 }

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

以上动图由“图斗罗”提供

上一篇: sql server2008数据库迁移的两种方案 下一篇: 没有下一篇了!
发表评论
用户名: 匿名