Безпараметрический базовый конструктор будет вызываться неявно, если вы не вызовете явно параметризованный базовый конструктор.
Если у вас есть
class Base { }
class Foo : Base { public Foo() { } }
Это не отличается от высказывания
class Foo : Base { public Foo() : base() { } }
Таким образом, если у вас есть параметризованный конструктор для Foo, base()
будет вызываться независимо от того, что вы делаете с this()
, если только у вас также нет параметризованного конструктора для Base
, который вы явно вызываете.
class Base
{
public Base() { }
public Base(int bar) { }
}
class Foo : Base
{
public Foo() : base() { }
public Foo(int bar) : base(bar) { }
// also legal:
// public Foo() : base(1) { }
// public Foo(int bar) : base(1) { }
// public Foo(int bar) : base() { }
// public Foo(int bar) { } /* uses implicit call to base() */
// public Foo() { } /* ditto */
}
В любом случае, базовый класс будет создан сначала либо через конструктор без параметров (неявно или явно), либо через конструктор с параметрами (явно).