我一直在reading this article about closures他們說:關閉有什麼特別之處?
- 「所有的管道是自動的」
- 編譯「將創建一個包裝類」和「擴展了變量的生命」
- 「你可以使用局部變量不用擔心」
- 的.NET編譯器採用管道對你的關心,等
所以我做了根據他們的代碼,並給我一個例子,它似乎儘管閉包的行爲與普通的命名方法類似,它們也「無需擔心局部變量」,並且「所有管道都是自動的」。
或者這個「局部變量的包裝」解決了什麼問題使得閉包變得如此特別/有趣/有用?
using System;
namespace TestingLambda2872
{
class Program
{
static void Main(string[] args)
{
Func<int, int> AddToIt = AddToItClosure();
Console.WriteLine("the result is {0}", AddToIt(3)); //returns 30
Console.ReadLine();
}
public static Func<int, int> AddToItClosure()
{
int a = 27;
Func<int, int> func = s => s + a;
return func;
}
}
}
回答
所以,這個問題的答案之一就是閱讀Jon Skeet's article on closures是馬克指出。本文不僅展示了C#中lambda表達式的演變過程,還展示瞭如何在Java中處理閉包,這是本主題的絕佳讀物。
其他語言(如Javascript)支持關閉。你在問關於這個概念還是C#的具體實現? – strager 2009-04-17 10:09:21
我認爲這個例子太簡單,無法理解封閉的力量。 – 2009-04-17 10:12:00