现在这是 .NET,但我确信原则应该适用于所有 OOP 语言,为了简化我以 .NET 为例:

R# 通常创建构造函数并将传入变量传递给私有字段,对我来说,我倾向于将其传递给 Property。

关于有何不同以及最佳实践是什么有什么意见吗?

有帮助吗?

解决方案

只要属性不是虚拟的/覆盖的,使用属性就可以。属性本质上是方法,您不应该从构造函数中调用虚拟方法,因为可能尚未构造适当的类型。微软已经列出了自己的 一套指导方针, ,只需向下滚动到底部即可查看说明问题的相关指南和代码片段(它们使用方法进行说明,但正如我所提到的,.NET 属性本质上是特殊方法)。

其他提示

通过属性设置器传递参数允许您将任何验证代码仅保留在一处。

我建议将其发送到属性,而不是直接发送到私有字段,尽管您的实际实现将决定确切的条件。例如,有时在使用属性时会触发一些事件,而您不想在构造函数期间触发这些事件。或者您可能出于其他原因想要规避属性逻辑。

使用属性设置器时要小心。setter 中的代码可能会导致意外的副作用。

我在构造函数内操作字段。字段真正代表了对象的固有状态,构造函数的工作就是初始化这个内部状态。属性在这里只是为了封装目的,并且是对象状态公共接口的一部分。

在设置对象的内部状态之前应用于构造函数参数或属性输入值的转换逻辑可能非常不同。无论如何,如果是这种情况,我曾经使用从属性设置器和构造函数调用的显式转换方法,而不是直接在属性设置器上链接构造函数。

如果根本没有逻辑,我不明白为什么你想在构造函数内使用属性设置器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top