Ошибка 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 аргументами. Но мой вопрос: зачем нам конструктор с нулевыми аргументами? Почему код не работает без него?
6 ответов
Поскольку вы явно не вызываете родительский конструктор как часть вашего дочернего конструктора класса, существует неявный вызов вставленного родительского конструктора без параметров. Этот конструктор не существует, и вы получите эту ошибку.
Чтобы исправить ситуацию, вам нужно добавить явный вызов:
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 child(int i) : base(i){
Console.WriteLine("child");}
Вы можете использовать конструктор без параметров в вашем родительском классе:
public parent() { }