zoukankan      html  css  js  c++  java
  • 如何创建C# Closure ?

    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.

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

  • 相关阅读:
    spring(三):ApplicationContext
    android Xutils dbutils 注解
    android 录音的断点续传
    android 原生dialog对话框
    android asyncTask 详解
    自定义的dialog
    fragment 添加menu
    android baseApplication 基类
    看项目得到info_freeCsdn-01闪屏页面
    开源项目 github
  • 原文地址:https://www.cnblogs.com/ldyblogs/p/Closure.html
Copyright © 2011-2022 走看看