У меня есть структура класса как
abstract class Animal {
public Animal(){
//init stuff..
}
}
class Cat : Animal {
public Cat(bool is_keyboard) : base() //NOTE here
{
//other init stuff
}
}
Теперь затем посмотрите на отмеченную строку. Если Вы удаляете : base()
затем это скомпилирует без ошибки.
Почему это? Существует ли способ отключить это поведение?
Существует неявное : base ()
, если вы не добавляете ничего другого (any : base (.. .)
или : это (...)
). Чтобы заставить его быть явным, добавьте параметр в базовый конструктор (ы). Тогда это не может быть неявным.
Например:
public Animal(string name) {...}
17.10.4 Конструкторы по умолчанию :
Если класс не содержит объявлений конструкторов экземпляров , автоматически предоставляется конструктор экземпляров по умолчанию . 2 Этот конструктор по умолчанию просто вызывает конструктор без параметров прямого базового класса. 3 Если прямой базовый класс не имеет доступный без параметров {{1 }} во время компиляции возникает ошибка . 4 Если класс абстрактный, то объявленная доступность для конструктора по умолчанию защищена. 5 В противном случае объявленная доступность для конструктора по умолчанию является общедоступной
Почему так происходит?
В этой статье это объясняется.
Есть ли способ отключить это поведение?
Нет. Мне жаль (но ... См. ответ на метку для обходного пути : )