zoukankan      html  css  js  c++  java
  • 如何创建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.

  • 相关阅读:
    强制转换改变了对象的框架大小
    android应用程序fps meter[帧数显示]的分析 —— 浅谈root的风险 (1)
    父类virtual和overload,子类reintroduce; overload;
    MySQL版本与工具
    Verilog HDL实用教程笔记
    XE2安装JVCL
    解决Raize日历控件显示的问题
    hdu3415 Max Sum of Max-K-sub-sequence
    MFC重绘原理的关键理解
    常用代码页与BOM
  • 原文地址:https://www.cnblogs.com/isaboy/p/c_delegate_func_closure.html
Copyright © 2011-2022 走看看