Что произойдет, если у вас есть: base () в верхнем классе? - PullRequest
0 голосов
/ 09 сентября 2018

У меня проблемы с пониманием того, что произойдет, если вы поместите: base () в верхний класс. Код выглядит так ...

class A {
 public A(): this(3) {
  Console.Write("1");
 }
 public A(int x): base() {
  Console.Write("{0}", x);
 }
}

class B:A {
 public B(): this(4) {
Console.Write("3");
 }
 public B(int x) {
  Console.Write("{0}", x):
 }
}

class C:B {
 public C(int x): base() {
  Console.Write("{0}", x):
 }
 public C(): this(7) {
  Console.Write("6");
 }
}

class Program {
 public static void Main(string[] args) {
   C c = new C();
  }

Не понимаю, зачем нам начинать сверху (класс А). Так какой будет выход?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Ваши высшие классы неявно наследуются от System.Object (псевдоним C # object). Так что это в основном вызывает конструктор по умолчанию object. Но так как конструктор по умолчанию базового класса вызывается по умолчанию в любом случае, это ничего не меняет.

So

public A(int x)
    : base()
{
}

и

public A(int x)
{
}

эквивалентны.

Если конструктор базового класса имеет параметры, то вы должны явно вызвать его, чтобы передать необходимые параметры.

См .: Использование конструкторов (Руководство по программированию в C #)

0 голосов
/ 09 сентября 2018

Все классы наследуются от класса System.Object по умолчанию, поэтому при добавлении base() в верхний класс A вы вызываете конструктор класса объекта, это ничего не вызовет.

...