У меня есть метод интерфейса
public void Execute(ICommand command);
, который должен передать известные подтипы ICommand
в соответствующую реализацию Handle(SpecificCommand command)
метода и выполнить некоторую общую обработку неизвестных типов. Я ищу универсальный (т. Е. Не требующий гигантского переключателя) способ сделать это, похожий на
Handle(command as command.GetType()); // this obviously does not compile
Я знаю, что мог бы как-то зарегистрировать обработчики, например, сохраняйте их как делегаты в словаре, но для этого все равно требуется дублирование логики обработки (один раз в сигнатуре конкретного метода Handle(...)
, один раз при повторной регистрации делегата). Если я заполню словарь, осмотрев мой класс с отражением (ища Handle(XXX command)
методы), я получу удар по производительности.
Подводя итог: как я могу уменьшить значение объекта (повышенное с помощью вызова Execute(ICommand command)
) для вызова метода, требующего конкретного типа, не зная, какой это тип во время компиляции.