Прежде всего, это не дублирующий вопрос.
Я знаю факты, которые:
- При наследовании порядок выполнения конструкторов будет в том же порядке, что и их вывод и порядок выполнения деструкторов будут в обратном порядке их вывода.
- Кроме того, мы можем явно вызвать конструктор базового класса, используя ключевое слово
base
в определении конструктора.
Мой вопрос: Для моего ниже кода
class ClassA
{
public ClassA(int a)
{
Console.WriteLine("Parameterized Constructor of ClassA");
}
}
class ClassB : ClassA
{
public ClassB(int a)
{
Console.WriteLine("Parameterized Constructor of ClassB");
}
}
class ClassC : ClassB
{
public ClassC(int a)
{
Console.WriteLine("Parameterized Constructor of ClassC");
}
}
class Program
{
static void Main(string[] args)
{
ClassC classc = new ClassC(1);
Console.ReadLine();
}
}
Я получаю ошибку времени выполнения:
'ClassA' does not contain a constructor that takes 0 arguments
'ClassB' does not contain a constructor that takes 0 arguments
Но когда я добавляю конструкторы по умолчанию к обоим классам как:
class ClassA
{
public ClassA()
{
Console.WriteLine("Default Constructor of ClassA");
}
public ClassA(int a)
{
Console.WriteLine("Parameterized Constructor of ClassA");
}
}
class ClassB : ClassA
{
public ClassB()
{
Console.WriteLine("Default Constructor of ClassB");
}
public ClassB(int a)
{
Console.WriteLine("Parameterized Constructor of ClassB");
}
}
class ClassC : ClassB
{
public ClassC()
{
Console.WriteLine("Default Constructor of ClassC");
}
public ClassC(int a)
{
Console.WriteLine("Parameterized Constructor of ClassC");
}
}
class Program
{
static void Main(string[] args)
{
ClassC classc = new ClassC(1);
Console.ReadLine();
}
}
Я получил результат, как ожидалось.
Default Constructor of ClassA
Default Constructor of ClassB
Parameterized Constructor of ClassC
SO это означает, что во время наследования всем базовым классам нужен конструктор без параметров.
У меня пока не было четких объяснений. Пожалуйста, не делайте это как дубликат, и любое хорошее объяснение ценится.