繁体   English   中英

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

[英]C# Error: Parent does not contain a constructor that takes 0 arguments

我的代码是

public class Parent
{

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

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

}

我收到错误:

Parent 不包含采用 0 个参数的构造函数。

我理解问题是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");}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM