1

请参阅下面的代码片段

class scopes
{
  static int j=20;
  Console.WriteLine(j);
    public static void Main()
   {
       int j=30;
       Console.WriteLine(j);
       return;
   }
}

对于上面的代码,支持变量隐藏
见下面的代码

public static int Main()
{
    int j = 20;
    for (int i=0; i < 10; i++)
    {
        int j = 30;    //can't do this
        Console.WriteLine(j + i);
    }
    return 0;
}

此处不支持上述代码变量隐藏。

这背后的原因是什么?

4

1 回答 1

4

在第一种情况下,至少有一种明确的方式来消除这两种事物之间的歧义,即this.方法内部的前缀this.j是字段,其中j成员是成员。至于为什么支持它:推测,但可能是为了向类添加一个字段(在类的情况下可能在不同的代码文件中partial)不会导致随机方法开始引发编译器错误。请注意,j方法中 of 的含义在添加字段之前和之后是相同的j

In the second case, this is not a concern: adding locals can only impact the single local method, and there is no disambiguation syntax (i.e. which j do we mean), and no risk of accidental breakage from unrelated code.

于 2012-11-15T14:12:30.090 回答