在同一单元的类方法中使用属性而不是字段是一种不好的做法?

时间:2011-11-26 21:01:37

标签: delphi

我已经为给定的类声明了私有字段和公共属性。

我可以通过提供访问权限的公共财产访问其他单位。

但是在声明此类的同一单元内,我可以选择通过属性直接访问字段。

建议的最佳做法是什么:直接读/写字段或通过提供读写访问权限的属性?

3 个答案:

答案 0 :(得分:6)

David's taste相反,我总是使用私有/受保护字段,但仅在同一类(私有时)或衍生(受保护时)内。绰绰有误,原因还在于我的可读性:

  • 到目前为止,FCount读作Count,
  • 使用私有字段表明我正在处理内部事务,
  • 在我使用该属性的零星情况下,很明显我需要来触发它后面的setter或getter。

这里的关键点是一致的。选择一个,并坚持下去。没有对错。

由于杰瑞的评论而更新:

关于保持一致的观点是对每个人自身利益的一般建议。习惯使用一个默认语法,你的代码将在你的余生中清晰地表达(对你而言)。

当然,当您选择使用私有字段时,会出现偶然情况,您必须使用该属性。但这反过来也适用:如果您选择使用该属性,那么您将需要使用私有字段。我只是说当你坚持使用系统时,异常会更像是例外。

答案 1 :(得分:5)

嗯,这可能主要是出于个人品味。

我自己总是选择这个属性,即使在声明属性的类的内部编码时也是如此。例如,在我看来,Count而不是FCount更好。

另一个观点是,如果你向公众公开了一个房产,并且它足以供公众消费,那么私人消费应该没问题。

另一种观点是,如果您选择尽可能使用最公开的界面,那么当您使用私有内容时会更加明显。因此,如果您发现需要编写FCount,因为没有Count,那么您会温柔地提醒您这是您正在使用的私人名称。

所以,正如我所说,没有明确的答案,只有我个人的意见和偏好。

答案 2 :(得分:2)

如果你不使用任何吸气剂和固定剂,那只是味道问题。使用属性或字段将生成完全相同的代码。

如果你确实使用了getter和setter,如果你不想使用getter / setter代码(例如在constructor中),你可以明确地使用私有字段。

如果您的getter和setter是virtual,即使默认实现只是一项任务,您也必须检查SOLID principles,并确保至少遵循Liskov替换和Open /关闭原则。