День двести второй. #BestPractices

Советы по разработке типов

2. Разработка абстрактных классов

ИЗБЕГАЙТЕ определения открытых (public) или защищённых внутренних (protected internal) конструкторов в абстрактных типах. Конструкторы должны быть открытыми, только если пользователям нужно будет создавать экземпляры типа. Поскольку вы не можете создавать экземпляры абстрактного типа, абстрактный тип с открытым конструктором неправильно спроектирован и вводит пользователей класса в заблуждение.



ИСПОЛЬЗУЙТЕ защищённые (protected) или внутренние (internal) конструкторы в абстрактных классах. Защищенный конструктор является более распространенным и позволяет базовому классу выполнять собственную инициализацию при создании подтипов. Внутренний конструктор может использоваться для ограничения конкретных реализаций абстрактного класса только сборкой, определяющей класс.



ИСПОЛЬЗУЙТЕ хотя бы один конкретный тип, наследующий от каждого абстрактного класса. Это помогает проверить дизайн абстрактного класса. Например, System.IO.FileStream является реализацией абстрактного класса System.IO.Stream.



Продолжение следует…



Источник: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/