Parent不包含带0个参数的构造函数

时间:2013-03-02 12:57:12

标签: c#

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

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

3 个答案:

答案 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() { }