如何创建C# Closure?

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

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

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

  利用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  }
复制代码

  C# Closure调用如下所示:

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

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

水平有限,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注! 
出处: http://www.cnblogs.com/isaboy/ 
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted on 2016-01-06 15:27 诀语尘定 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/iihcy/p/5105778.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值