Tengo un objeto o
que garantizado en tiempo de ejecución para ser uno de tres tipos A
, B
, o C
, todos los cuales implementan una interfaz común I
. Puedo controlar I
, pero no A
, B
, o C
. (Por lo tanto, podría usar una interfaz de marcador vacía, o de alguna manera aprovechar las similitudes en los tipos mediante el uso de la interfaz, pero no puedo agregar nuevos métodos o cambiar los existentes).¿Cómo envío a un método basado en el tipo de tiempo de ejecución de un parámetro en C# <4?
También tengo un serie de métodos MethodA
, MethodB
y MethodC
. Se busca el tipo de tiempo de ejecución o
y luego se usa como parámetro para estos métodos.
public void MethodA(A a) { ... }
public void MethodB(B b) { ... }
public void MethodC(C c) { ... }
Utilizando esta estrategia, en este momento un cheque tiene que ser realizada en el tipo de o
para determinar qué método debe ser invocado. En su lugar, me gustaría simplemente tienen tres métodos sobrecargados:
public void Method(A a) { ... } // these are all overloads of each other
public void Method(B b) { ... }
public void Method(C c) { ... }
Ahora estoy dejando C# hacer el envío en lugar de hacerlo de forma manual a mí mismo. Se puede hacer esto? El enfoque simple ingenuo no funciona, por supuesto:
No se puede resolver el método 'Método (objeto)'. Los candidatos son:
- Método void (A)
- Método void (B)
- void Método (C)
pruébalo? la-la-la –
Si hubiera tipos D, E y F, ¿necesitarían todos una implementación del método también? –
@Jason: Presumiblemente, sí, pero en mi caso particular es poco probable que existan otros tipos de este tipo. –