C#,Java中的变量范围

本文关键字:变量 范围 Java | 更新日期: 2023-09-27 18:32:00

不,这不是我的作业。
(因为我旁边有一叠答卷,等着被标记。

问:如果方法中的局部变量与主程序中的变量同名,会发生什么情况?
a) 生成
错误b) 主程序中的变量被"隐藏",直到方法完成执行
c) 主程序中的变量将覆盖方法
中的变量d) 以上均不具备任何一项。

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

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

this.x

MainProgram.x

对于静态变量。

所以我的问题是:
对于 C#,选项 b 是否可以被视为为真?为什么?

请分享您的想法。

C#,Java中的变量范围

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

我请您参阅 C# 4 规范的第 3.7.1 节,为了方便起见,我在此处引用其开头:

实体

的作用域通常包含比实体的声明空间更多的程序文本。具体而言,实体的范围可能包括引入包含相同名称实体的新声明空间的声明。此类声明会导致原始实体变得隐藏。相反,当实体未隐藏时,它被称为可见的。

正确理解规范的这一部分要求您了解实体的作用域与其声明空间之间的差异。范围是程序文本的区域,其中实体可能由其非限定名称引用。声明空间是程序文本的区域,其中实体的名称是唯一的。

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

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