如果我在C#中有这段代码:
public abstract class Parent
{
private int x;
public Parent(int x)
{
this.x = x;
}
public abstract void foo;
}
public class Child
{
public override void foo()
{
x = x + 10;
}
}
我收到错误:
Parent不包含带0个参数的构造函数。
如何在不创建非参数构造函数的情况下修复它?
答案 0 :(得分:4)
您可以在Child
中创建构造函数,例如
public Child(int x) : base(x)
{
}
构造函数不继承 - 但如果您根本不提供任何构造函数,C#编译器会尝试创建一个与此类似的构造函数:
public Child() : base()
{
}
这就是失败的原因,因为没有无参数的基本构造函数可以调用。
您的派生类构造函数当然不必具有与基类构造函数相同的参数 - 只要它将适当的参数传递给基础构造函数,那就没问题。例如,您可以写:
public Child() : base(0) // Default to x = 0
{
}
有关详细信息,请参阅我的article on constructors。
答案 1 :(得分:0)
通过手动调用Parent的构造函数:
public class Child: Parent {
public Child( )
: base(0) { }
public override void foo( ) {
x = x + 10;
}
}
答案 2 :(得分:0)
这是因为对一个零参数的构造函数进行了隐式调用。
所以你需要添加一个显式调用:
public Child(int x) : base(x)
{
}
或者,您可以在父本身中添加零参数构造函数:
public parent() { }