Почему порядок ввода статических.ctors отличается от экземпляра.ctors в унаследованных классах?
Зачем var b = new B()
сначала входит static B()
.ctor и чем static A()
.ctor
а не наоборот, как это делают конструкторы экземпляров (public A()
и тогда public B()
)?
public class A
{
static A() {}
public A() {}
}
public class B : A
{
static B() {}
public B() {}
}
1 ответ
Решение
Технически конструктор экземпляра B
вводится первым. Но первое, что он делает, это вызывает конструктор A
и только потом переходит в определяемое пользователем тело.
Поэтому я предполагаю, что непосредственно перед конструктором B
вводится статический конструктор B
должен бежать.
Тогда конструктор B
вызывает конструктор A
, который запускает статический конструктор A
,