田野的范围冲突&局部变量

时间:2012-11-15 14:08:50

标签: c# scope

见下面的代码片段

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;
}

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

这背后的原因是什么?

1 个答案:

答案 0 :(得分:4)

在第一种情况下,至少有一种定义的方法来消除两者之间的歧义,即this.前缀 - 在方法内,this.j是字段,其中 - 作为{{1是会员。至于为什么支持这一点:推测,但可能是,以便向类添加一个字段(在j类的情况下可能在不同的代码文件中)不会导致随机方法开始抛出编译器错误。请注意,在添加字段partial之前和之后,方法中j的含义相同。

在第二种情况下,这不是一个问题:添加本地化只能影响单个本地方法,并且没有消歧歧义语法(即我们的意思是j),并且没有意外破坏的风险< strong>来自不相关的代码。