一个非常简单的问题,说我有一个具有20个引用类型属性的类,我知道只会在创建类时/在创建类后立即设置,而在没有任何类的情况下这些属性确实是必需的。
在这种情况下,最佳实践是创建一个接受20个属性的ctor
(由于它们都是引用类型,因此如果需要,它们仍允许您传递null
)并确保我的所有财产都没有setter
或...
要根本不拥有ctor
,而只需为我的所有财产提供setter
?
我倾向于后者,因为它易于实现并且(尽管)不能保证对象的不变性,但可以说是更简洁的代码,但是这些类仅在内部使用,我知道我也不会对其进行更改
编辑
如果您要投票结束该问题,至少要得体面地解释为什么您认为该问题对于如此高的SO标准而言“不够好”。
如果这不是这里的问题,我真的不知道SO的意义了。
答案 0 :(得分:3)
如果所有这些属性不是必需的,并且它们不必是只读的,则不需要构造函数。没有人愿意调用一个带有20个参数的构造函数,尤其是在不必要的情况下。
因此,即使这个问题往往是主观的,也要使用属性并省略构造函数。
答案 1 :(得分:0)
您应该为其设置属性并使用对象初始化程序:
class Cat
{
// Auto-implemented properties.
public int Age { get; set; }
public string Name { get; set; }
public object OtherProperty { get; set; }
}
Cat cat = new Cat { Age = 10, Name = "Fluffy" };
这为您提供了简洁的代码,而无需指定不需要的属性。即使您指定了所有属性,它也不会更长。
我将使用构造器,其中属性是必需的,或者基于某种源对象,例如DataRow或文件。
答案 2 :(得分:-1)
看起来像是违反单一责任原则。建议在包含构造函数的方法中使用0-3个参数。