У меня есть объект o
, который во время выполнения гарантированно относится к одному из трех типов A
, B
или C
, каждый из которых реализует общий интерфейс I
. Я могу управлять I
, но не A
, B
или C
. (Таким образом, я мог бы использовать пустой интерфейс маркера или каким-то образом воспользоваться сходством типов с помощью интерфейса, но я не могу добавлять новые методы или изменять существующие в типах.)
У меня также есть ряд методов MethodA
, MethodB
и MethodC
. Выполняется поиск типа среды выполнения o
, который затем используется в качестве параметра для этих методов.
public void MethodA(A a) { ... }
public void MethodB(B b) { ... }
public void MethodC(C c) { ... }
Используя эту стратегию, прямо сейчас необходимо выполнить проверку типа o
, чтобы определить, какой метод следует вызывать. Вместо этого я хотел бы просто иметь три перегруженных метода:
public void Method(A a) { ... } // these are all overloads of each other
public void Method(B b) { ... }
public void Method(C c) { ... }
Теперь я позволяю C# выполнять отправку вместо того, чтобы делать это вручную. Можно ли это сделать? Наивный прямолинейный подход, конечно, не работает:
Не удается разрешить метод «Метод (объект)». Кандидаты:
- Пустой метод (А)
- Пустой метод (B)
- Пустой метод (С)