Почему является основой () конструктор, не необходимый?

У меня есть структура класса как

abstract class Animal {
  public Animal(){
    //init stuff..
  }
}

class Cat : Animal {
  public Cat(bool is_keyboard) : base() //NOTE here
  {
    //other init stuff
  }
}

Теперь затем посмотрите на отмеченную строку. Если Вы удаляете : base() затем это скомпилирует без ошибки.

Почему это? Существует ли способ отключить это поведение?

8
задан Earlz 31 March 2010 в 21:08
поделиться

3 ответа

Существует неявное : base () , если вы не добавляете ничего другого (any : base (.. .) или : это (...) ). Чтобы заставить его быть явным, добавьте параметр в базовый конструктор (ы). Тогда это не может быть неявным.

Например:

public Animal(string name) {...}
7
ответ дан 5 December 2019 в 20:15
поделиться

17.10.4 Конструкторы по умолчанию :

Если класс не содержит объявлений конструкторов экземпляров , автоматически предоставляется конструктор экземпляров по умолчанию . 2 Этот конструктор по умолчанию просто вызывает конструктор без параметров прямого базового класса. 3 Если прямой базовый класс не имеет доступный без параметров {{1 }} во время компиляции возникает ошибка . 4 Если класс абстрактный, то объявленная доступность для конструктора по умолчанию защищена. 5 В противном случае объявленная доступность для конструктора по умолчанию является общедоступной

1
ответ дан 5 December 2019 в 20:15
поделиться

Почему так происходит?

В этой статье это объясняется.

Есть ли способ отключить это поведение?

Нет. Мне жаль (но ... См. ответ на метку для обходного пути : )

0
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: