Внутри абстрактного класса для конструктора экземпляра все модификаторы public
, protected internal
и protected
эквивалентны.Тогда internal
является более строгим, чем они, и private
является наиболее строгим доступом.
Если все конструкторы экземпляров private
, то наследовать могут только классы, вложенные в рассматриваемый класс.*
Примечание. Если конструкторы экземпляров не указаны для нестатического класса, компилятор сам его сгенерирует.Это конструктор, принимающий нулевые аргументы.Если класс абстрактный, этот автоматически сгенерированный конструктор имеет вид protected
.В противном случае это public
.
Единственная ситуация, в которой я могу думать, где это имеет значение, если конструктор экземпляра абстрактного класса - public
или protected
, - это когда вы используете отражение.Например, выражение
ConstructorInfo[] ctors = typeof(Vehicle).GetConstructors();
даст пустой массив, если единственным конструктором является protected
, и массив длины-1, если он public
.Но, конечно, есть перегрузки, которые задают BindingFlags
, так что это не проблема, просто что-то, что нужно запомнить, если использовать отражение.