现在这是 .NET,但我确信主体应该适用于所有 OOP 语言,为了简化,我以 .NET 为例:
R# 通常是创建者构造函数并将传入变量传递给私有字段,对我来说,我倾向于将其传递给属性。
关于不同之处以及最佳实践是什么的任何意见?
使用属性是可以的,只要它们不是虚拟的/覆盖的。属性本质上是方法,你不应该在构造函数中调用虚方法,因为可能还没有构造合适的类型。Microsoft 列出了他们自己的一套指南,只需向下滚动到底部即可查看相关指南和说明问题的代码片段(他们使用方法来说明问题,但正如我提到的 .NET 属性本质上是特殊方法)。
通过属性设置器传递参数允许您将任何验证代码仅保留在一个位置。
我建议将其发送到属性,而不是直接发送到私有字段,尽管您的实际实现将决定确切的条件。例如,有时在使用 Property 时会触发事件,而您不想在构造函数期间触发这些事件。或者您可能出于其他原因想要绕过 Property 逻辑。
小心使用属性设置器。您可能在 setter 中有可能导致意外副作用的代码。
我在构造函数中操作字段。字段真正代表了对象的固有状态,构造函数的工作就是初始化这个内部状态。属性只是为了封装目的,并且是对象状态的公共接口的一部分。
在设置对象的内部状态之前应用于构造函数参数或属性输入值的转换逻辑可能会非常不同。无论如何,如果是这种情况,我曾经使用从属性设置器和构造器调用的显式转换方法,而不是直接在属性设置器上链接构造器。
如果根本没有逻辑,我看不出你为什么要在构造函数中使用属性设置器。