【发布时间】:2010-07-17 11:04:08
【问题描述】:
每次我编写琐碎的 getter(获取只返回成员值的函数)时,我想知道为什么 oop 语言不简单地有一个“只读”访问修饰符来允许读取对象成员的值但不允许您像 C++ 中的 const 一样设置它们。
private、protected、public 访问修饰符为您提供完全(读/写)访问权限或无访问权限。
编写一个 getter 并每次调用它都很慢,因为函数调用比仅仅访问一个成员要慢。一个好的优化器可以优化这些 getter 调用,但这是“魔术”。而且我认为学习某个编译器的优化器如何工作并编写代码来利用它并不是一个好主意。
那么在实践中,为什么我们需要编写访问器、只读接口,而只是一个新的访问修饰符就可以解决问题呢?
ps1:请不要说“它会破坏封装”之类的东西。公开的foo.getX() 和公开但只读的foo.x 会做同样的事情。
编辑:我没有写清楚我的帖子。对不起。我的意思是你可以在外面读取成员的值,但你不能设置它。您只能在类范围内设置其值。
【问题讨论】:
-
您的 ps1 假设 Property Getter 始终是字段变量的简单封装,但情况并非总是如此。例如,属性getter可能是一个包含多个字段的计算、字段的串联等。属性getter封装了逻辑,因此可以轻松更改内部实现。
-
响应您的编辑,Marcelo Cantos 的回答或我的回答将完全满足您的需要。