程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成在匿名辦法中捕捉內部變量的辦法

C#完成在匿名辦法中捕捉內部變量的辦法

編輯:C#入門知識

C#完成在匿名辦法中捕捉內部變量的辦法。本站提示廣大學習愛好者:(C#完成在匿名辦法中捕捉內部變量的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成在匿名辦法中捕捉內部變量的辦法正文


先來一段代碼引入主題。假如你可以直接說出代碼的輸入成果,解釋本文不合適你。(代碼引自《深刻懂得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();
    }
  }


謎底在本文最下方。

先引入兩個界說:

1、內部變量:是指感化域內包含匿名辦法的部分變量或參數。

2、捕捉的內部變量:是指在匿名辦法中應用的內部變量。

界說有點籠統,針對下面的代碼而言,inside和outside都是匿名辦法的內部變量,而inside和outside異樣也作為被匿名辦法捕捉的內部變量,由於在匿名辦法體中援用了這兩個變量。

而被匿名辦法捕捉到的是變量自己,而並不是變量的值。針對下面的代碼而言,履行outside++和inside++時,操作的其實就是內部的inside和outside變量。

至此,我們應當可以得出outside的變更應當是從0到4。

那末法式的輸入也應當是這個模樣的:(X代碼未知)

(0,X)

(1,X)

(2,X)

(3,X)

(4,X)

 

現實上,在for輪回體外面做的器械就是實例化了兩個TestDelegate拜托對象:delegate[0]和delegate[1]

而輪回的履行,現實上會實例化兩個稱號都為inside的變量。

這兩個變量之間沒有甚麼聯系關系,僅僅是稱號一樣罷了。

這兩個變量分離作為delegate[0]和delegate[1]的內部捕捉變量。也就是delegate[0]和delegate[1]在操作inside時,是互不影響的。

因而,得出謎底:

(0,0)

(1,1)

(2,2)

(3,0)

(4,1)

謎底

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved