Уместность 'общедоступного' конструктора в абстрактном классе

Есть ли какая-либо уместность 'общедоступного' конструктора в абстрактном классе? Я не могу думать ни о каком возможном способе использовать его, в этом случае не был должен это рассматриваться как ошибку компилятором (C#, не уверенный, если другие языки позволяют это).

Пример кода:

internal abstract class Vehicle
{
    public Vehicle()
    {            
    }
}

Компилятор C# позволяет этому коду компилировать, в то время как нет никакого способа, которым я могу вызвать этого конструктора от внешнего мира. Это можно назвать от производных классов только. Так не был должен это позволять 'защищенные' и 'частные' модификаторы только. Прокомментируйте.

16
задан John Saunders 30 April 2010 в 05:53
поделиться

3 ответа

Нет причин для открытого конструктора для абстрактного класса.Я предполагаю, что причина, по которой компилятор не жалуется, настолько проста, что они просто не потратили время на это, поскольку на самом деле не имеет значения, является ли он общедоступным или защищенным.

6
ответ дан 30 November 2019 в 23:09
поделиться

Дуп: есть еще один вопрос по SO, вот так: Модификатор доступа к конструктору абстрактного класса

Ответы на этот вопрос в конечном итоге сводятся к одному и тому же: на самом деле не имеет значения, объявляете ли вы это защищенный или общедоступный .

Также, кажется, есть некоторые дискуссии об этом в литературе (например, в Framework Design Guidelines ). Об этом говорится в этом сообщении блога: Хороший или плохой дизайн абстрактного класса?

1
ответ дан 30 November 2019 в 23:09
поделиться

Да, public ctor в абстрактном классе не имеет смысла и немного вводит в заблуждение, поскольку он будет вести себя как protected, т.е. только производные классы могут его вызывать.

А private ctor будет иметь мало смысла за пределами интересных крайних случаев.

Ктор protected будет иметь смысл, если он требуется производным классам.

1
ответ дан 30 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

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