在对象内编码时,我应该使用对象的属性还是内部变量?

时间:2012-06-01 06:07:11

标签: .net oop

我正在清理具有可设置属性的类中的一些代码,并使用保存该值的局部变量。

代码的某些部分当前在外部调用以获取值而不是使用自己的属性,其他部分有时使用属性本身,而在其他部分使用局部变量。

在这种情况下,属性只是由创建此类对象的工厂方法设置,因此该属性始终与变量相同。但是我不确定我是否应该假设我正在编写的代码就是这种情况,因为将来更难以在getter方法后面添加逻辑。

这可能是对的,或者我忘记了我的OO原则中的基本内容?

4 个答案:

答案 0 :(得分:1)

降低复杂性并提高可维护性。

你应该做的第一件事是减少一个项目存在的位置(你似乎在做什么)。

接下来,您应该使用任何语言技巧来减少代码的大小。对于某些版本的c#中的例子,您不需要声明字段来保存属性值。

完成此操作后,您可以选择任何一种方法 - 没有来自一方的性能优化。但要保持一致。那将增加可维护性。

就个人而言,我更喜欢随时使用属性。

答案 1 :(得分:0)

使用Auto-implemented properties,只需稍后添加私有变量和额外的get / set代码。

e.g。

  public int CustomerID { get; private set; }

答案 2 :(得分:0)

我使用属性,除了我将它们标记为readonly的字段,这意味着它们只能通过对象初始化/构造函数获得它们的常量值。

如果您的应用程序的任何要求将来发生变化,我的属性将更容易维护。您只需在一个地方添加代码。

答案 3 :(得分:0)

从OO的角度来看,我认为有两种类型的属性。 (注意:这仅适用于类内部。类用户不应意识到这种差异。)

某些属性实际上是主类中包含的独立类。 (“main”类是正在考虑的类,不一定是启动程序的类。)它们只能通过属性引用,即使在主类的代码中也是如此。查看它的get和set方法应该告诉你整个属性的故事。它们不是主要对象的组成部分,而是相关的信息,如公共领域,但更安全。

另一种主要对象的组成部分。在极端情况下,他们甚至可能没有相关的领域;在调用时,getter可能会使用涉及许多字段的计算来汇总值。当存在单个字段时,读取和写入的内部代码很容易找到getter和setter对其进行太多更改。 (对象可能会跟踪一个以5开头的值。随着时间的推移,可能会减去10并添加12。此时,值应为7.但是getter可能永远不会允许外部世界减少值比零,所以当值为-5时,它将返回0。)

我会决定每个属性是哪种类型,然后以某种方式进行。不要分裂差异。所有引用都应该属于属性本身,或者所有引用都应该属于它后面的字段。 (除非直接引用属性而不是复制getter和setter中的代码可能会更好。但我对此并不是很满意。)

通过“外部调用”我收集了一个返回字段值的常规方法。这可能有意义。为了直观起见,属性必须尽可能像公共字段一样,常规方法可以进行更改。 (考虑属性DistanceInFeet和方法GetDistanceInMeters())。调用Get方法而不是复制其代码是有意义的。这意味着整体属性属于第二种类型,是对象的组成部分。

因此,您正在清理的代码可能是正确的,OO-wise - 但我怀疑不是。