构造函数变量应该直接传递给私有字段或属性吗?

时间:2008-09-25 04:46:16

标签: .net oop resharper

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

R#通常​​是创建者构造函数并将传入的变量传递给私有字段,对我来说mi往往会将其传递给Property。

关于不同之处以及最佳实践是什么的任何意见?

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

小心使用Property Setter。您可能在setter中有代码可能会导致意外的副作用。

答案 4 :(得分:1)

我操纵构造函数中的字段。字段实际上表示对象的固有状态,构造函数作业是初始化此内部状态。属性仅用于封装目的,并且是对象状态的公共接口的一部分。

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

如果根本没有逻辑,我不明白你为什么要在构造函数中使用属性setter。