最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 中閉包(Closure)詳解

 更新時(shí)間:2017年06月06日 15:31:01   投稿:lqh  
這篇文章主要介紹了C# 中閉包(Closure)詳解的相關(guān)資料,需要的朋友可以參考下

C# 中閉包(Closure)詳解

這個(gè)問(wèn)題是在最近一次英格蘭 Brighton ALT.NET Beers 活動(dòng)中提出來(lái)的。我發(fā)現(xiàn),如果不用代碼來(lái)演示,你很難單用話語(yǔ)把它解釋清楚,所以,在這里,我打算用 C# 來(lái)解釋一下什么是閉包(closures)。維基百科上說(shuō):

在計(jì)算機(jī)科學(xué)中,閉包(Closure)是詞法閉包(Lexical Closure)的簡(jiǎn)稱,是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開(kāi)了創(chuàng)造它的環(huán)境也不例外。所以,有另一種說(shuō)法認(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();

這里我們首先定義了一個(gè)變量“x”,值為1。然后我們定義了一個(gè)匿名函數(shù)(一個(gè) lambda 表達(dá)式)賦給類型 Action。Action 沒(méi)有參數(shù), 沒(méi)有返回值,但如果你觀察“action”里的定義,你會(huì)發(fā)現(xiàn)它使用了“x”變量。這是變量是被 action“捕獲”或“攜帶”的,自動(dòng)被添加到了 action 的運(yùn)行環(huán)境中了。

當(dāng)我們執(zhí)行 action 時(shí),它輸出了我們預(yù)期的結(jié)果。請(qǐng)注意,當(dāng)我們執(zhí)行時(shí),原始的“x”此時(shí)已經(jīng)脫離了它當(dāng)初的變量環(huán)境,但它仍然能用。

當(dāng)你在代碼調(diào)試器(debugger)里觀察“action”時(shí),會(huì)發(fā)現(xiàn)很有趣的事情。我們可以看到,C# 編譯器為我們創(chuàng)建了一個(gè) Target 類,里面封裝了 x 變量:

閉包(Closure)

閉包(和 higher order functions)都是非常有用的東西。如果你曾經(jīng)開(kāi)發(fā)過(guò)稍微復(fù)雜一點(diǎn)的 JavaScript 程序,你可能就會(huì)知道,這個(gè)東西可以被當(dāng)成很多面向?qū)ο筇卣鞯奶娲?,就?C# 那樣。前不久我還在 C# 里寫(xiě)了一個(gè)例子來(lái)驗(yàn)證這種想法。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Unity實(shí)現(xiàn)車型識(shí)別的示例代碼

    Unity實(shí)現(xiàn)車型識(shí)別的示例代碼

    這篇文章主要介紹了在Unity中接入百度AI,實(shí)現(xiàn)檢測(cè)一張車輛圖片的具體車型。即對(duì)于輸入的一張圖片(可正常解碼,且長(zhǎng)寬比適宜),輸出圖片的車輛品牌及型號(hào)。需要的可以參考一下
    2022-01-01
  • C#使用iTextSharp將PDF轉(zhuǎn)成文本的方法

    C#使用iTextSharp將PDF轉(zhuǎn)成文本的方法

    這篇文章主要介紹了C#使用iTextSharp將PDF轉(zhuǎn)成文本的方法,涉及C#操作pdf文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C# ListBox中的Item拖拽代碼分享

    C# ListBox中的Item拖拽代碼分享

    在本文中我們給大家分享了關(guān)于C#的ListBox中的Item拖拽的功能代碼分享,對(duì)此有需要的朋友參考學(xué)習(xí)下。
    2018-03-03
  • c# 委托詳解

    c# 委托詳解

    本文將通過(guò)實(shí)例解析對(duì)c# 委托進(jìn)行詳細(xì)介紹,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C#中DateTime.Compare()比較時(shí)間大小

    C#中DateTime.Compare()比較時(shí)間大小

    本文主要介紹了C#中DateTime.Compare()比較時(shí)間大小,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C# 中const,readonly,static的使用小結(jié)

    C# 中const,readonly,static的使用小結(jié)

    這篇文章主要介紹了C# 中使用const,readonly,static的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#中JSON轉(zhuǎn)為實(shí)體類和List以及結(jié)合使用

    C#中JSON轉(zhuǎn)為實(shí)體類和List以及結(jié)合使用

    開(kāi)發(fā)中經(jīng)常遇到將JSON字符串轉(zhuǎn)換為L(zhǎng)ist的需求,下面這篇文章主要給大家介紹了關(guān)于C#中JSON轉(zhuǎn)為實(shí)體類和List以及結(jié)合使用的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • C#在winform中實(shí)現(xiàn)數(shù)據(jù)增刪改查等功能

    C#在winform中實(shí)現(xiàn)數(shù)據(jù)增刪改查等功能

    本篇文章主要是介紹了C#在winform中操作數(shù)據(jù)庫(kù),實(shí)現(xiàn)數(shù)據(jù)增刪改查,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • C#常用數(shù)據(jù)結(jié)構(gòu)棧的詳細(xì)介紹

    C#常用數(shù)據(jù)結(jié)構(gòu)棧的詳細(xì)介紹

    在C#中,Stack<T> 是一個(gè)后進(jìn)先出(LIFO,Last-In-First-Out)集合類,位于System.Collections.Generic 命名空間中,本文詳細(xì)介紹C#常用數(shù)據(jù)結(jié)構(gòu)棧,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • C#值類型、引用類型中的Equals和==的區(qū)別淺析

    C#值類型、引用類型中的Equals和==的區(qū)別淺析

    這篇文章主要介紹了C#值類型、引用類型中的Equals和==的區(qū)別淺析,本文分別對(duì)C#值類型和引用類型中的Equals和==做了講解和給出了實(shí)例,需要的朋友可以參考下
    2015-01-01

最新評(píng)論

利辛县| 岑巩县| 黄骅市| 扎囊县| 积石山| 延吉市| 清远市| 哈巴河县| 长葛市| 桂林市| 宜州市| 昭觉县| 金塔县| 福泉市| 镇江市| 本溪市| 麦盖提县| 酉阳| 施甸县| 巴南区| 西平县| 孙吴县| 本溪市| 九龙坡区| 巴林右旗| 桃园县| 天门市| 锡林郭勒盟| 板桥市| 颍上县| 安康市| 安阳县| 且末县| 老河口市| 甘肃省| 洮南市| 滨州市| 青龙| 商城县| 佛坪县| 衢州市|