2012-11-15 44 views
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; 
} 

这里上面的代码变量隐藏是不支持。

这背后的原因是什么?

+0

你的第一个例子不能编译,无论是。 – Rawling

+0

'Console.WriteLine(j);'在第一个例子中是我猜的错字。 –

+1

轻微术语的事情 - 如果你只好打电话给第一个例子(即编译一个)的名字,想必这将是* *外地躲藏,没有*变量*隐藏;在*变量*就不会被挡住... –

回答

4

在第一种情况下,至少有一个明确的方法可以在两种情况之间消除歧义,即this.前缀 - 在方法内部,this.j是字段,其中j是成员。至于为什么这个支持:炒作,但可能使添加字段到类(这可能是在partial类的情况下,不同的代码文件)不会导致随机方法来启动抛出编译器错误。注意,在该方法中的j含义前和场j加入后是相同的。

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