请参阅下面的代码片段
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;
}
此处不支持上述代码变量隐藏。
这背后的原因是什么?
最佳答案
在第一种情况下,至少有一个定义的方法来消除两者之间的歧义,即 this.
前缀 - 在方法内部,this.j
是字段,其中-as j
是成员。至于为什么支持:推测,但可能这样向类添加一个字段(在 partial
类的情况下可能位于不同的代码文件中)不会' 导致随机方法开始抛出编译器错误。注意方法中j
的in在添加字段j
前后的含义是一样的。
在第二种情况下,这不是问题:添加局部变量只会影响单个局部方法,并且没有消歧语法(即我们指的是哪个 j
),也没有风险意外损坏来自不相关的代码。
关于c# - 字段和局部变量的范围冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399185/