J'ai un objet o
qui a garanti à l'exécution être l'un des trois types A
, B
, ou C
, qui mettent en œuvre une interface commune I
. Je peux contrôler I
, mais pas A
, B
ou C
. (Ainsi, je pourrais utiliser une interface de marqueur vide, ou en quelque sorte tirer parti des similitudes dans les types en utilisant l'interface, mais je ne peux pas ajouter de nouvelles méthodes ou modifier les existantes dans les types.)Comment envoyer vers une méthode basée sur le type d'exécution d'un paramètre dans C# <4?
J'ai aussi un série de méthodes MethodA
, MethodB
et MethodC
. Le type d'exécution o
est recherché et est ensuite utilisé en tant que paramètre pour ces méthodes.
public void MethodA(A a) { ... }
public void MethodB(B b) { ... }
public void MethodC(C c) { ... }
En utilisant cette stratégie, en ce moment une vérification doit être effectuée sur le type de o
pour déterminer quelle méthode devrait être invoquée. Au lieu de cela, je voudrais simplement avoir trois méthodes surchargées:
public void Method(A a) { ... } // these are all overloads of each other
public void Method(B b) { ... }
public void Method(C c) { ... }
Maintenant, je laisse C# faire l'expédition au lieu de le faire moi-même manuellement. Cela peut-il être fait? L'approche simple naïve ne fonctionne pas, bien sûr:
Impossible de résoudre la méthode 'Méthode (objet)'. Les candidats sont les suivants:
- Procédé vide (A)
- Procédé vide (B)
- Procédé vide (C)
l'essayer? la-la-la –
S'il y avait des types D et E et F auraient-ils tous besoin d'une implémentation de la méthode aussi? –
@Jason: Vraisemblablement, oui, mais dans mon cas particulier, d'autres types de ce type sont peu susceptibles d'exister. –