0

如果我在 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 个参数的构造函数。

如何在不创建非参数构造函数的情况下修复它?

4

3 回答 3

4

您可以在中创建构造函数Child,例如

public Child(int x) : base(x)
{
}

构造函数不是继承的——但如果您根本不提供任何构造函数,C# 编译器会尝试创建一个与此等效的构造函数:

public Child() : base()
{
}

这就是这里失败的原因,因为没有可以调用的无参数基础构造函数。

当然,您的派生类构造函数不必具有与基类构造函数相同的参数 - 只要它将适当的参数传递给基构造函数,就可以了。例如,您可以编写:

public Child() : base(0) // Default to x = 0
{
}

有关更多详细信息,请参阅我关于构造函数的文章。

于 2013-03-02T12:58:35.513 回答
0

通过手动调用 Parent 的构造函数:

public class Child: Parent {
    public Child( ) 
        : base(0) { }

    public override void foo( ) {  
        x = x + 10;
    }
}
于 2013-03-02T12:59:09.547 回答
0

那是因为有一个对零参数的构造函数的隐式调用。

所以你需要添加一个显式调用:

public Child(int x) : base(x)
{
}

或者,您可以在父级本身中添加零参数构造函数:

public parent() { }
于 2013-03-02T13:01:06.013 回答