为什么甚至打扰使用公共成员变量?

时间:2012-02-23 02:16:51

标签: oop

我不明白为什么我们甚至需要使用公共成员变量。

为什么我们不能总是将它们设置为私有并改为使用getter / setter?能够使用除了访问变量以外的函数似乎总是比直接访问变量更好,然后发现需要稍后更改。

何时谨慎使用公众?

2 个答案:

答案 0 :(得分:5)

相当主观。

但是假设我对看似很好的做法有非常主观的看法......

当您将该类用作“数据传输对象”(有时称为“值对象”)时,有时会将其视为“谨慎”。这些的本质是它们是精益的,不包含行为,只包含状态。如果您不熟悉这种模式,它基本上只是将对象/基元组合成一个容器,这是它的唯一功能。

除此之外,似乎可以接受的做法是,由于您提到的原因,公共成员领域是不明智的。另一个原因是访问控制。有时消费者应该只能读取一个值,它应该只能在本地设置。使用Getters / Setters可以让你做这样的事情。 (有些语言也允许你通过const /只读字段来完成一些操作,这些字段可以在初始化时设置一次)

Fowler似乎在DTO本身上放置了序列化功能,但是在DTO / Value Object的字段上不应存在的一个思想流派行为。 http://martinfowler.com/eaaCatalog/dataTransferObject.html

答案 1 :(得分:1)

如果您确保具有公共成员变量的类保持内部(即其他库/可执行文件不可见),那么它很好,因为一切都在您的控制之下。特别是当你想快速开发或快速将C代码移植到OO语言时,例如Java,C#,......

如果类在外面可见,则可以通过getter / setter进行更好的封装。

如果您使用C#作为编程语言,则可以使用“属性”。当您将字段更改为属性时,您无需更改任何引用的代码(除非您已使用带有ref / out的字段)。