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参数的构造函数。 但我的问题是,为什么我们需要一个零参数的构造函数? 为什么没有它的代码工作?

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

要纠正这种情况,您需要添加一个明确的调用:

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

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

 protected Parent() { } 

你需要改变你的孩子的构造函数为:

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

你得到的错误,因为你的父类的构造函数接受一个参数,但你没有将该参数从孩子传递给父母。

构造函数不是用C#inheritance的,你必须手动链接它们。

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

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

部分: base(i)意味着应该使用带有一个int参数的基类的构造函数。 如果缺less,则隐含地告诉编译器使用不带参数的默认构造函数。 因为在基类中不存在这样的构造函数,所以它会给你这个错误。

编译器无法猜测应该为基础构造函数parameter passing什么。 你必须明确地做到这一点:

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

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

 public parent() { } 

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

如果基类没有无参数构造函数,则必须自己明确地调用它:

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

参考: 构造函数在inheritance期间调用层次结构