javaScript中一個重要的概念就是閉包,閉包在Javascript中有大量的應用,但是你知道么?C#也可以創建Closure。下面就介紹一下如何在C#中創建神奇的閉包。
在這之前,我們必須先知道如何在C#中定義函數
1 //函數定義,參數為string,返回為string2 Func<string, string> myFunc = delegate(string msg)3 {4 return "Msg:" + msg;5 };
利用Lambda表達式也可以簡化上述的代碼,但是效果一樣:
1 //Lambda2 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));//75 Console.WriteLine(inc(6));//96 }
當第二次調用inc(6)時,此時函數內變量myVar并未像第一次調用函數時進行重新初始化(var myVar=1),而是保留了第一次運算的值,即 2,因此inc(6)返回的結果為(2+1+6)=9.
新聞熱點
疑難解答