代码之家  ›  专栏  ›  技术社区  ›  c.sokun

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

  •  3
  • c.sokun  · 技术社区  · 16 年前

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

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

    有什么不同意见吗?最佳实践是什么?

    5 回复  |  直到 16 年前
        1
  •  5
  •   Brian B.    16 年前

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

        2
  •  3
  •   Franci Penov    16 年前

    通过属性设置器传递参数,可以只在一个地方保留任何验证代码。

        3
  •  3
  •   Adam Ness    16 年前

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

        4
  •  2
  •   erlando    16 年前

    请小心使用属性setter。您可能在setter中有可能导致意外副作用的代码。

        5
  •  1
  •   Romain Verdier    16 年前

    我在构造函数内操作字段。字段实际上表示对象的固有状态,构造函数的工作是初始化这个内部状态。属性仅用于封装,是对象状态公共接口的一部分。

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

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