Ошибка C#: Parent не содержит конструктор, который принимает 0 аргументов


мой код

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 аргументами. Но мой вопрос в том, зачем нам нужен конструктор с нулевыми аргументами? Почему код не работает без него?

6 133

6 ответов:

чтобы исправить ситуацию, нужно добавить явный вызов:

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

или, вы можете просто добавить parameterless родительский конструктор:

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:конструктор, вызывающий иерархию во время наследования