Почему конструктор base () не нужен? - PullRequest
8 голосов
/ 01 апреля 2010

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 01 апреля 2010

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

Например:

public Animal(string name) {...}
1 голос
/ 01 апреля 2010

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

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

0 голосов
/ 01 апреля 2010

Почему это?

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

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

Неа. Я извиняюсь (но ... Смотрите ответ на вопрос об обходном пути:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...