Я очень смущен значением «конструктора по умолчанию» в С#. Многие люди, включая моего профессора программирования, просто называют любой конструктор без параметров «конструктором по умолчанию» (например, в вопросах и ответах здесь или здесь) . Даже вики тега SO на default-constructor говорит, что это "конструктор без параметров... часто (обратите внимание, что он говорит часто, не всегда) генерируется компилятором".
Если следует следовать этой логике, то, является ли конструктор «по умолчанию» или нет, зависит от того, как вы можете его вызвать. т.е. если вы можете назвать его способом «по умолчанию», без каких-либо параметров, это конструктор по умолчанию.
Однако MSDN, если я Я правильно читаю, кажется, что имя "конструктор по умолчанию" дается только конструктору без параметров, который неявно генерируется, когда не указан другой конструктор, вызывает конструктор базового класса без параметров и (как и любой другой конструктор ) инициализирует поля class
их значениями.
Если подумать, это имеет больше смысла, чем "default" == "parameterless"
: неявно сгенерированный конструктор похож на параметр по умолчанию, если вы не выбрали ничего другого.
Итак, правильно ли называть все конструкторы без параметров конструкторами по умолчанию?
Или правильно вызывать явно определенные конструкторы формы public C(): base() {}
(для обычных классов) и protected C(): base() {}
(для абстрактных классов) конструкторами по умолчанию, поскольку они соответствуют описанию конструктора по умолчанию в MSDN?
Или термин действительно применим только к неявно сгенерированным конструкторам?
Также (вероятно, самый важный вопрос): какое определение термина является наиболее распространенным, правильным или неправильным?