Вместо switch по конкретному типу вынесите различающееся действие в виртуальный метод или интерфейс и вызовите его через общий контракт. Реализация выбирается по фактическому типу объекта.
Как можно заменить switch-case по типу наследника с использованием полиморфизма?
Вместо switch по конкретному типу вынесите различающееся действие в виртуальный метод или интерфейс и вызовите его через общий контракт. Реализация выбирается по фактическому типу объекта.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Вместо switch по конкретному типу вынесите различающееся действие в виртуальный метод или интерфейс и вызовите его через общий контракт. Реализация выбирается по фактическому типу объекта.
interface INotification { void Send(); }
class EmailNotification : INotification {
public void Send() { Console.WriteLine("email"); }
}
class SmsNotification : INotification {
public void Send() { Console.WriteLine("sms"); }
}
void Deliver(INotification notification) => notification.Send();
Добавление реализации не требует изменять Deliver. Побочные зависимости в рабочем коде лучше внедрять явно. Если меняется внешняя операция над закрытой иерархией, альтернативами могут быть Visitor или таблица стратегий; перенос любого switch в наследование не всегда оправдан.