给Abstract Classes一个构造函数是否存在一些固有的错误?

时间:2013-10-11 20:21:11

标签: c# constructor abstract-class

http://msdn.microsoft.com/en-us/library/ms182126.aspx

Microsoft设计指南说,抽象类型不应该有构造函数。

对我而言,从抽象类派生的大多数类将具有与其基础非常相似(如果不相同)的构造函数似乎是非常合理的。

如果没有其他原因但是要遵循DRY,那么使用Constructors创建抽象类是否真的很糟糕,如果它意味着所有派生类现在只需要放入

    public DerivedClass()
        : base()
    {

    }

还是有什么我想念的?

1 个答案:

答案 0 :(得分:1)

没有什么可以阻止你这样做,但根据定义,抽象类是那些无法实例化的类。因此,如果您创建一个构造函数,请将其保护,而不是公开,否则您的类将不符合抽象的定义。

您提到的指南进一步解释:

  

原因:公共类型是抽象的,并且具有公共构造函数。

  

规则描述:抽象类型的构造函数只能由派生类型调用。因为公共构造函数创建了类型的实例,并且您无法创建抽象类型的实例,所以具有公共构造函数的抽象类型设计不正确。

     

如何修复违规:要修复违反此规则的行为,请使构造函数受到保护,或者不要将该类型声明为抽象。