繁体   English   中英

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

[英]is it good design practice to only have a parameterless base class constructor?

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

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

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

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

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

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

public employee(int age) : base(this)

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

如果对象不能使用或者依赖于此类的每个方法,这是一个很好的做法。 例如,如果您的类在所有函数中具有相同的参数,那么最好在构造函数中设置它,因此函数签名更小。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM