构造函数或属性:在分配值时哪一个是更好的选择

use*_*432 13 c# constructor properties

当我们应该在赋值时使用构造函数而不是属性,反之亦然.

Rex*_*x M 32

构造函数是一种非常方便且强大的契约类型 - 一种要求消费者在甚至可以使用您的对象之前提供某些信息的方法.因此,对于实例正常运行所必需的信息,请使用构造函数参数.这是依赖注入的基本概念 - 您在完成工作时所依赖的任何东西,必须在开始之前注入(提供)给您.

属性可以代表一个有趣的问题.一般来说,经验告诉我,只要有可能,属性应该是只读的,对象通常应该尽可能外部不变.将属性公共setter添加到属性是您的类的复杂性的乘数.当然,总有一些对象类型 - 实体就是一个很好的例子 - 其中setter是有意义的.但是对于大多数对象来说,状态的"通过构造函数写入"/"通过属性读取"的模式大大降低了我负责的应用程序的复杂性和错误风险.


Vla*_*lad 6

如果构造对象确实需要参数值(没有它们,对象将无法开始生存),请使用构造函数。使用具有可接受的默认值的参数属性,因此根本不分配它们也是可以的。您可以提供一些额外的构造函数,它们将分配一些属性作为速记,以礼貌地对待您的用户。