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

C#實(shí)現(xiàn)在匿名方法中捕獲外部變量的方法

 更新時(shí)間:2015年03月31日 08:50:19   投稿:junjie  
這篇文章主要介紹了C#實(shí)現(xiàn)在匿名方法中捕獲外部變量的方法,本文直接給出代碼實(shí)例,然后分析了代碼中的一些知識(shí)點(diǎn),需要的朋友可以參考下

先來(lái)一段代碼引入主題。如果你可以直接說(shuō)出代碼的輸出結(jié)果,說(shuō)明本文不適合你。(代碼引自《深入理解C#》第三版)

class Program
  {
    private delegate void TestDelegate();
 
    static void Main(string[] args)
    {
      TestDelegate[] delegates = new TestDelegate[2];

      int outside = 0;

      for(int i = 0; i < 2; i++)
      {
        int inside = 0;

        delegates[i] = delegate
        {
          Console.WriteLine("({0},{1})", outside, inside);
          outside++;
          inside++;
        };
      }

      delegates[0]();
      delegates[0]();
      delegates[0]();

      delegates[1]();
      delegates[1]();

      Console.ReadKey();
    }
  }


答案在本文最下方。

先引入兩個(gè)定義:

1、外部變量:是指作用域內(nèi)包括匿名方法的局部變量或參數(shù)。

2、捕獲的外部變量:是指在匿名方法中使用的外部變量。

定義有點(diǎn)抽象,針對(duì)上面的代碼而言,inside和outside都是匿名方法的外部變量,而inside和outside同樣也作為被匿名方法捕獲的外部變量,因?yàn)樵谀涿椒w中引用了這兩個(gè)變量。

而被匿名方法捕獲到的是變量本身,而并非變量的值。針對(duì)上面的代碼而言,執(zhí)行outside++和inside++時(shí),操作的其實(shí)就是外部的inside和outside變量。

至此,我們應(yīng)該可以得出outside的變化應(yīng)該是從0到4。

那么程序的輸出也應(yīng)該是這個(gè)樣子的:(X代碼未知)

(0,X)

(1,X)

(2,X)

(3,X)

(4,X)

 

實(shí)際上,在for循環(huán)體里面做的東西就是實(shí)例化了兩個(gè)TestDelegate委托對(duì)象:delegate[0]和delegate[1]

而循環(huán)的執(zhí)行,實(shí)際上會(huì)實(shí)例化兩個(gè)名稱(chēng)都為inside的變量。

這兩個(gè)變量之間沒(méi)有什么關(guān)聯(lián),僅僅是名稱(chēng)一樣而已。

這兩個(gè)變量分別作為delegate[0]和delegate[1]的外部捕獲變量。也就是delegate[0]和delegate[1]在操作inside時(shí),是互不影響的。

于是,得出答案:

(0,0)

(1,1)

(2,2)

(3,0)

(4,1)

答案

相關(guān)文章

  • C#中List<T>存放元素的工作機(jī)制

    C#中List<T>存放元素的工作機(jī)制

    這篇文章介紹了C#中List<T>存放元素的工作機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • c# 所有類(lèi)型都從Object類(lèi)型派生

    c# 所有類(lèi)型都從Object類(lèi)型派生

    所有的類(lèi)型最終從object派生,每一個(gè)類(lèi)型都有一組最基本的方法
    2012-10-10
  • C#計(jì)時(shí)器的三種實(shí)現(xiàn)方法

    C#計(jì)時(shí)器的三種實(shí)現(xiàn)方法

    這篇文章主要介紹了C#計(jì)時(shí)器的三種實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Unity3D快速入門(mén)教程

    Unity3D快速入門(mén)教程

    本文講述了Unity3D如何快速入門(mén),包含Unity3D游戲引擎介紹,學(xué)習(xí)歷程和Unity3D快速入門(mén)的途徑,通過(guò)該篇文章的講解,希望能夠讓你更好的去學(xué)習(xí)Unity3D引擎
    2021-06-06
  • WPF使用webView實(shí)現(xiàn)顯示瀏覽器網(wǎng)頁(yè)

    WPF使用webView實(shí)現(xiàn)顯示瀏覽器網(wǎng)頁(yè)

    在WPF中顯示一個(gè)可以操作的瀏覽器界面,你可以使用WebBrowser控件或WebView2控件,下面我們就來(lái)看看如何分別使用這兩個(gè)控件實(shí)現(xiàn)顯示瀏覽器網(wǎng)頁(yè)吧
    2025-01-01
  • C#實(shí)現(xiàn)影院售票系統(tǒng)

    C#實(shí)現(xiàn)影院售票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)影院售票系統(tǒng),解析了售票系統(tǒng)的難點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解C# 反射(Reflection)

    詳解C# 反射(Reflection)

    這篇文章主要介紹了C# 反射(Reflection)的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#實(shí)現(xiàn)六大設(shè)計(jì)原則之迪米特法則

    C#實(shí)現(xiàn)六大設(shè)計(jì)原則之迪米特法則

    這篇文章介紹了C#實(shí)現(xiàn)六大設(shè)計(jì)原則之迪米特法則的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • c# datetime 格式化大全

    c# datetime 格式化大全

    這篇文章主要介紹了c# datetime 格式化大全,有需要的朋友可以參考一下
    2014-01-01
  • ftp服務(wù)器搭建部署與C#實(shí)現(xiàn)ftp文件的上傳的示例

    ftp服務(wù)器搭建部署與C#實(shí)現(xiàn)ftp文件的上傳的示例

    本文主要介紹了ftp服務(wù)器搭建部署與C#實(shí)現(xiàn)ftp文件的上傳的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論

土默特左旗| 济源市| 缙云县| 固原市| 扎赉特旗| 南汇区| 博湖县| 民勤县| 岳池县| 大埔县| 棋牌| 双城市| 土默特左旗| 鄯善县| 宜宾市| 临颍县| 敦化市| 沾化县| 额济纳旗| 昌邑市| 五华县| 无棣县| 错那县| 宝清县| 蒙自县| 商丘市| 平湖市| 小金县| 固原市| 定结县| 潢川县| 太仓市| 云和县| 济源市| 金坛市| 阜城县| 嘉兴市| 巴塘县| 和田县| 射阳县| 南开区|