不,这不是我的作业。
(因为我旁边有一堆答卷,等着批改。)
问:如果方法中的局部变量与主程序中的变量同名,会发生什么?
a)产生错误
b)在方法执行完成之前,主程序中的变量是“隐藏的”
c)主程序中的变量将覆盖方法中的变量
d)以上都不是。
教科书上的答案是b,非常简单。
但转念一想,它真的是“隐藏的”吗?
据我所知,在纯面向对象的语言中,如C#和Java,
我们可以随时使用
this.x
或
MainProgram.x
用于静态变量。
所以我的问题是:
对于C#,选项b可以被认为是正确的吗?为什么?
请分享你的想法。
发布于 2012-04-21 16:33:35
是的,局部变量x
在该方法/块的作用域中隐藏了成员变量x
(或者更准确地说,隐藏了成员变量pst)。您可以将后者的限定名称为this.x
,以使工作更轻松,但是答案是正确的。(完全)限定名不再依赖于作用域,因此它不能被隐藏或隐藏。
发布于 2012-04-21 23:01:29
我建议您参考C# 4规范的3.7.1节,为了方便您,我在这里引用它的开头部分:
实体的作用域通常比实体的声明空间包含更多的程序文本。具体地说,实体的作用域可以包括引入新声明空间的声明,这些声明空间包含具有相同名称的实体。这样的声明会使原始实体变成隐藏的。相反,当实体不是隐藏时,则称其为可见。
正确理解规范的这一部分要求您理解实体的作用域和它的声明空间之间的区别。作用域是程序文本区域,在该区域中可以通过实体的非限定名称来引用实体。声明空间是程序文本区域,其中实体的名称是唯一的。
有关详细信息,请阅读3.7.1节的其余部分。
我还注意到,指定的术语是“隐藏的”,尽管"shadowed“也经常使用。
https://stackoverflow.com/questions/10257449
复制相似问题