C # 错误: 父级不包含接受0个参数的构造函数

我的原则是

public class Parent
{


public Parent(int i)
{
Console.WriteLine("parent");
}
}


public class Child : Parent
{
public Child(int i)
{
Console.WriteLine("child");
}


}

我得到了一个错误:

父级不包含接受0个参数的构造函数。

我知道问题在于 Parent没有带0个参数的构造函数。但我的问题是,为什么我们需要一个参数为零的构造函数?为什么没有它代码就不能工作?

104699 次浏览

您需要将 child类的构造函数更改为:

public child(int i) : base(i)
{
Console.WriteLine("child");
}

: base(i)部分意味着应该使用具有一个 int参数的基类的构造函数。如果缺少这一点,你就是在隐含地告诉编译器使用没有参数的缺省构造函数。因为基类中不存在这样的构造函数,所以它给出了这个错误。

由于没有将父构造函数作为子类构造函数的一部分显式调用,因此插入了对无参数父构造函数的隐式调用。该构造函数不存在,因此您会得到这个错误。

为了纠正这种情况,您需要添加一个显式调用:

public Child(int i) : base(i)
{
Console.WriteLine("child");
}

或者,您可以只添加一个无参数的父构造函数:

protected Parent() { }

您需要将孩子的构造函数更改为:

public child(int i) : base(i)
{
// etc...
}

之所以出现这个错误,是因为父类的构造函数接受了一个参数,但是没有将该参数从子类传递给父类。

构造函数不能在 C # 中继承,必须手动链接它们。

编译器无法猜测应该为基本构造函数参数传递什么。必须显式地这样做:

public class child : parent {
public child(int i) : base(i) {
Console.WriteLine("child");
}
}

可以在 Parent 类中使用不带参数的构造函数:

public parent() { }

默认情况下,编译器尝试调用基类的无参数构造函数。

如果基类没有无参数构造函数,那么您必须自己显式地调用它:

public child(int i) : base(i){
Console.WriteLine("child");}

档号: 继承期间构造函数调用层次结构