只有一个无参数的基类构造函数是一个很好的设计实践吗?

时间:2010-03-22 15:01:31

标签: c# design-patterns

在基类构造函数中,我总是看到一个无参数构造函数,如下所示:

   public abstract BaseClass {...
protected BaseClass() { }
...}

但是在基类构造函数中包含参数是否可以接受?

   public abstract BaseClass {...
protected BaseClass(string initObj) { }
...}

6 个答案:

答案 0 :(得分:12)

是的,基类需要参数化构造函数是可以接受的。这简单地强制要求任何继承的类必须为基础构造函数提供值。

答案 1 :(得分:2)

在大多数情况下,派生类具有某种形式的参数化构造函数。 因此,当调用这些构造函数时,它们仍然可以调用无参数的基础构造函数:

public employee(int age) : base(this)

答案是如果你只需要添加一个,那就没有错。可以考虑一个业务对象基类,它需要一些验证才能说出电话号码或电子邮件地址。您希望确保派生类将这些业务规则加载到它们中。如果您没有基类构造函数,则无法将这些规则添加到派生类对象中。

答案 2 :(得分:2)

如果对象无法使用或依赖于此类的每个方法,这是一个很好的做法。例如,如果你的类在所有函数中都有相同的参数,那么最好在构造函数中设置它,这样函数签名就会更小。

答案 3 :(得分:2)

基类的编写者在您的第一个示例中所做的只是确保没有公开构造函数。可能基类在构造函数中没有什么特别之处,但是如果你不编写任何东西,编译器会为你添加默认的(无参数)构造函数。

不是我认为这特别有用。无论如何,你无法实例化一个抽象类。

答案 4 :(得分:1)

这是可以接受的。是否需要或有用完全取决于类的(设计)。

答案 5 :(得分:1)

是的,它是一个完全可以接受的设计决策,只有它必须对基类有意义 - 大概是从参数初始化自己的成员。此外,它对派生类施加了限制:要么必须传入文字,要么对其客户或其他派生类施加类似的限制。