|
本文是從 What is a Closure? 這篇文章翻譯而來。
這個(gè)問題是在最近一次英格蘭Brighton ALT.NET Beers活動(dòng)中提出來的。我發(fā)現(xiàn),如果不用代碼來演示,你很難單用話語把它解釋清楚,所以,在這里,我打算用C#來解釋一下什么是閉包(closures)。維基百科上說:
在計(jì)算機(jī)科學(xué)中,閉包(Closure)是詞法閉包(Lexical Closure)的簡稱,是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外。所以,有另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。
所以,一個(gè)閉包就是一個(gè)“捕獲”或“攜帶”了其被生成的環(huán)境中、所屬的變量范圍內(nèi)所引用的所有變量的函數(shù)。的確,很難描述,但當(dāng)你看完了這些代碼后,你就很容易理解了。
var x = 1;
Action action = () =>
{
var y = 2;
var result = x+y;
Console.Out.WriteLine("result = {0}", result);
};
action();
NET技術(shù):什么是閉包(Closure)?,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。