2012-11-15 46 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加入後是相同的。

在第二種情況下,這不是一個問題:添加本地人只能影響單個本地方法,並且沒有消歧句法(即我們的意思是哪個),並且沒有意外破壞的風險來自不相關的代碼