[英]Variable Scope in C#, Java
不,這不是我的功課。
(因為我旁邊有一疊答題紙,等待被標記。)
問:如果方法中的局部變量與主程序中的變量同名,會發生什么?
a)生成錯誤
b)主程序中的變量被“隱藏”,直到方法執行完畢
c)主程序中的變量將覆蓋方法中的變量
d)以上都不是。
教科書答案是b,非常簡單。
但是,再想一想,它真的“隱藏”了嗎?
據我所知,在純粹的面向對象語言中,如C#和Java,
我們總是可以使用
this.x
要么
MainProgram.x
對於靜態變量。
所以我的問題是:
對於C#,選項b是否可以被認為是真的? 為什么?
請分享你的想法。
是的,局部變量x
隱藏(或更確切地說, 陰影 - 感謝@pst)該方法/塊范圍內的成員變量x
。 您可以將后者的合格名稱稱為this.x
,以使生活更輕松,但答案是正確的。 (完全)限定名稱不再依賴於范圍,因此無法隱藏或隱藏。
我將向您介紹C#4規范的第3.7.1節,為方便起見,我在此引用其開頭部分:
實體的范圍通常包含比實體的聲明空間更多的程序文本。 特別是,實體的范圍可能包括引入包含同名實體的新聲明空間的聲明。 此類聲明會導致原始實體隱藏 。 相反,當一個實體未被隱藏時,它被認為是可見的 。
正確理解規范的這一部分要求您了解實體范圍與其聲明空間之間的區別。 范圍是程序文本的區域,實體可以通過其不合格的名稱來引用。 聲明空間是程序文本的區域,實體的名稱在該區域中是唯一的。
有關詳細信息,請閱讀3.7.1節的其余部分。
我還注意到指定的術語是“隱藏的”,但也經常使用“陰影”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.