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期间调用层次结构