c#错误:Parent不包含接受0个参数的构造函数

本文关键字:0个 参数 构造函数 包含接 错误 Parent | 更新日期: 2023-09-27 18:07:09

代码为

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

我得到错误:

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

我理解的问题是,Parent没有构造函数与0参数。但我的问题是,为什么我们需要一个零参数的构造函数?为什么没有它代码不能工作?

c#错误:Parent不包含接受0个参数的构造函数

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

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

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

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

protected Parent() { } 

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

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

你得到错误,因为你的父类的构造函数有一个参数,但你没有把这个参数从子类传递给父类。

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

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

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

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

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

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

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

public parent() { } 

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

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

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

Ref:继承期间调用层次结构的构造函数