我有一个abstract
带有构造函数的类XYZ(string name)
.
我还有一个继承自该抽象类的类。
如何强制遗传要调用的类base(string name)
?
现在我可以使用new Inherited()
并且它不会调用基本构造函数。我想强制用户在继承的类中实现默认构造函数。
没有显式构造函数的类具有无参数构造函数。另一方面,如果你实现一个构造函数带参数并且没有无参数构造函数,您的类将无法在没有参数的情况下实例化。
换句话说:
public abstract class A
{
public A(string x)
{
}
}
public class B : A
{
// If you don't add ": base(x)"
// your code won't compile, because A has a
// constructor with parameters!
public B(string x) : base(x)
{
}
}
也就是说,如果A
有一个无参数构造函数(或没有显式构造函数),B
将自动调用基本构造函数。您不需要在这里编写任何其他内容。
否则,如果您的基类具有无参数构造函数和带参数构造函数,则无法强制派生类自动调用除默认构造函数之外的构造函数(即所谓的无参数构造函数).
解决方法
嗯,这里没有特殊的解决方法,但请注意 C# 在构造函数和方法中都支持可选参数。
如果您想 100% 确定派生类将调用具体的基构造函数,您可以使用带有可选参数的单个无参数构造函数来实现基类,并使用它而不是构造函数重载:
public class A
{
public A(string x = "hello world") // or just string x = null
{
}
}
现在如果一个B
派生类A
, B
总会打电话A
的基本构造函数,因为x
是可选的并且有一个默认值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)