程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 如何創建C# Closure?,

如何創建C# Closure?,

編輯:C#入門知識

如何創建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/ 
聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved