Imagine具有许多构造函数和虚方法的基类
public class Foo
{
...
public Foo() {...}
public Foo(int i) {...}
...
public virtual void SomethingElse() {...}
...
}
现在我想创建一个重写虚拟方法的后代类:
public class Bar : Foo
{
public override void SomethingElse() {...}
}
还有一个后代做了更多的事情:
public class Bah : Bar
{
public void DoMoreStuff() {...}
}
我真的必须将所有构造函数从 Foo 复制到 Bar 和 Bah 中吗?然后,如果我更改 Foo 中的构造函数签名,是否必须在 Bar 和 Bah 中更新它?
没有办法继承构造函数吗?难道就没有办法鼓励代码重用吗?
是的,您必须实现对每个派生有意义的构造函数,然后使用base
关键字将该构造函数定向到适当的基类或this
关键字将构造函数定向到同一类中的另一个构造函数。
如果编译器对继承构造函数做出假设,我们将无法正确确定对象是如何实例化的。在大多数情况下,您应该考虑为什么有这么多构造函数,并考虑将它们减少到基类中只有一两个。然后,派生类可以使用常量值屏蔽其中一些,例如null
并且仅通过其构造函数公开必要的部分。
Update
在 C#4 中,您可以指定默认参数值并使用命名参数来使单个构造函数支持多个参数配置,而不是每个配置都有一个构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)