Базовый класс должен зависеть от абстракций: вызывать виртуальный метод, работать через интерфейс или получать стратегию извне. Перечисление конкретных наследников связывает базу с расширениями.
Базовый класс не должен зависеть от наследников — как это можно реализовать? Как можно заставить базовый класс знать о существовании наследников?
Базовый класс должен зависеть от абстракций: вызывать виртуальный метод, работать через интерфейс или получать стратегию извне. Перечисление конкретных наследников связывает базу с расширениями.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Базовый класс должен зависеть от абстракций: вызывать виртуальный метод, работать через интерфейс или получать стратегию извне. Перечисление конкретных наследников связывает базу с расширениями.
Template Method позволяет базе задавать общий алгоритм, а наследникам — переопределять отдельные шаги. Композиция с интерфейсом часто ещё проще: конкретная стратегия выбирается снаружи через DI.
Если действительно нужен каталог реализаций, его обычно создают в фабрике, registry или composition root, а не внутри базы. Reflection может обнаружить загруженные типы-наследники, но сама по себе не объясняет, как их создавать, и усложняет trimming/AOT. Проверки типа каждого наследника в базовом классе — признак неверной границы ответственности.