【发布时间】:2015-02-06 17:20:57
【问题描述】:
我有以下简单的类设计,其中 myObject 正在为 BaseClass 导入。
public abstract class BaseClass
{
public BaseClass(myObject parameter)
{
// ...
}
}
public class ChildClass : BaseClass
{
}
我现在的问题是,我想通过从公共 BaseClass 继承来使我的程序可扩展。所以你可以创建一个构造函数
public ChildClass() :base(new myObject()){...}
这将导致失败。是否有可能防止具有自己的构造函数的继承类?我实际上想完全避免 ChildClass 的构造函数。这可能吗?然后我可以使用工厂并提供一个 Initialize 方法。或者这是不可能的事情,我必须意识到并检查我的代码=
【问题讨论】:
-
构造函数不是继承的,一个类必须有一个构造函数。如果您不定义任何构造函数,则隐含无参数构造函数。您到底想避免哪些情况?
-
没有什么可以阻止构造函数的编写。您当然可以同意使用工厂模式并只制作私有构造函数并实现一些 IInitializable 接口或其他东西。
-
好的,我现在他们必须有一个构造函数,但我想只允许一个带有某些参数的构造函数。像 struct 不允许无参数构造函数
-
如果您的设计目标是支持工厂模式,为什么不考虑使用依赖注入容器(例如 Autofac、Unity 或 Ninject)来构建您的对象。正确设置,这些将允许通过容器(很像工厂)构造对象,即使类型依赖于非默认构造函数。
标签: c# inheritance