见下面的代码片段
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;
}
此处不支持上述代码变量隐藏。
这背后的原因是什么?
答案 0 :(得分:4)
在第一种情况下,至少有一种定义的方法来消除两者之间的歧义,即this.
前缀 - 在方法内,this.j
是字段,其中 - 作为{{1是会员。至于为什么支持这一点:推测,但可能是,以便向类添加一个字段(在j
类的情况下可能在不同的代码文件中)不会导致随机方法开始抛出编译器错误。请注意,在添加字段partial
之前和之后,方法中j
的含义相同。
在第二种情况下,这不是一个问题:添加本地化只能影响单个本地方法,并且没有消歧歧义语法(即我们的意思是j
),并且没有意外破坏的风险< strong>来自不相关的代码。