3

不,这不是我的作业。
(因为我旁边有一叠答卷,等着批改。)

问:如果方法中的局部变量与主程序中的变量同名,会发生什么?
a) 产生错误
b) 主程序中的变量是“隐藏的”,直到方法完成执行
c) 主程序中的变量将覆盖方法中的变量
d) 以上都不是。

教科书的答案是b,很简单。

但转念一想,它真的“隐藏”了吗?
据我所知,在 C# 和 Java 等纯面向对象的语言中,
我们总是可以使用

this.x

或者

MainProgram.x

对于静态变量。

所以我的问题是:
选项 b 是否适用于 C#?为什么?

请分享你的想法。

4

2 回答 2

4

是的,局部变量x隐藏(或更准确地说,阴影- 感谢@pst)该x方法/块范围内的成员变量。您可以将后者的限定名称称为this.x,以使生活更轻松,但答案是正确的。(完全)限定名称不再依赖于范围,因此它不能被隐藏或隐藏。

于 2012-04-21T08:33:35.403 回答
2

我向您推荐 C# 4 规范的第 3.7.1 节,为方便起见,我在此引用了它的开头:

实体的范围通常包含比实体的声明空间更多的程序文本。特别是,实体的范围可能包括引入新声明空间的声明,这些声明空间包含同名实体。这样的声明会导致原始实体被隐藏。相反,当实体不隐藏时,它被称为可见

正确理解规范的这一部分要求您理解实体的范围和它的声明空间之间的区别。范围是程序文本的区域,其中实体可以通过其非限定名称来引用。声明空间是实体名称唯一的程序文本区域。

有关详细信息,请阅读第 3.7.1 节的其余部分。

我还注意到,指定的术语是“隐藏的”,尽管“阴影”也经常使用。

于 2012-04-21T15:01:28.587 回答