http://msdn.microsoft.com/en-us/library/ms182126.aspx
Microsoft设计指南说,抽象类型不应该有构造函数。
对我而言,从抽象类派生的大多数类将具有与其基础非常相似(如果不相同)的构造函数似乎是非常合理的。
如果没有其他原因但是要遵循DRY,那么使用Constructors创建抽象类是否真的很糟糕,如果它意味着所有派生类现在只需要放入
public DerivedClass()
: base()
{
}
还是有什么我想念的?
答案 0 :(得分:1)
没有什么可以阻止你这样做,但根据定义,抽象类是那些无法实例化的类。因此,如果您创建一个构造函数,请将其保护,而不是公开,否则您的类将不符合抽象的定义。
您提到的指南进一步解释:
原因:公共类型是抽象的,并且具有公共构造函数。
和
规则描述:抽象类型的构造函数只能由派生类型调用。因为公共构造函数创建了类型的实例,并且您无法创建抽象类型的实例,所以具有公共构造函数的抽象类型设计不正确。
如何修复违规:要修复违反此规则的行为,请使构造函数受到保护,或者不要将该类型声明为抽象。