J'essaie de décomposer le problème en une description plus simple. J'utilise une bibliothèque de classes externe, qui expose 4 classes de base, toutes très similaires, parfois dérivées les unes des autres.C#: Types de variables dans le délégué
Pendant l'exécution, je suis rappelé sur plusieurs fonctions déléguées, toutes portant un "expéditeur d'objet", qui contient l'objet initial de l'une des 4 classes de base, appelée auparavant sur une fonction API.
échantillon (plus ou moins pseudo-code):
classA oA = new classA();
oA.API(callbackA);
Plus tard, le rappel est appelée, portant oA comme "expéditeur".
void callbackA(object Sender) {
classA oA = (classA)Sender;
oA.API2(xxx);
....
}
L'approche ci-dessus fonctionne correctement. Maintenant, je voulais l'étendre aux 3 classes restantes. Parce que la gestion de leurs rappels est plutôt identique, je ne voulais pas répliquer le code encore 3 fois, mais je préférerais que callbackA soit prêt à traiter les Senders de type classB, classC et classD.
Je ne peux pas réaliser ceci dans n'importe quelle solution utile. Quelqu'un peut-il m'aider? MISE À JOUR: Parce que j'ai eu beaucoup de réponse pointant vers "est" - "est" n'est pas une solution. Je dois avoir UNE variable, capable d'avoir plusieurs types. Casting dynamique?
Est-ce que ces classes ont une interface commune? –
Au moins, ils prétendent que B est un descendant de A ... – neil