Compte tenu de la hiérarchie suivante: Il s'agit d'une bibliothèque tierce partie et je ne peux pas la modifier. Existe-t-il une façon d'écrire une sorte de «wrapper modélisé générique» qui transmettrait la méthode FOO () à l'objet Aproprise passée comme argument de constructeur?
J'ai fini par écrire ce qui suit, qui n'utilise pas de génériques et semble plutôt laid: p> J'adorerais une contrainte de modèle comme Wrapper
4 Réponses :
Non, les deux génériques ne vous aidera pas ici, aussi loin comme je peux dire. Ce n'est pas comme s'il y a une interface (au moins aucun que vous avez montré) que vous pouvez contraindre Vous pouvez passer dans un ce qui le rend légèrement moins pratique pour l'appelant, mais très général ... p> p> FOO code> sont entièrement indépendants en ce qui concerne le compilateur. Le moyen le plus simple de faire cela sans em> connaître les types individuels à commencer serait d'utiliser la dactylographie dynamique: t code> à. P> action code> De plus: p>
C'est un pakeet Paunch. vous rock skeet.
Fusionner «Action de passage» de Jon avec la suggestion de Dasblinkenlight et un modèle T4 et vous devriez obtenir une solution très raisonnable et maintenable.
Si A code> n'a pas foo code>, vous devez soit utiliser dynamique code> (voir var wb = new Wrapper(new B());
wb.Foo(); // Call B's Foo()
var wc = new Wrapper(new C());
wc.Foo(); // Call C's Foo()
Merci à tous! Je pense que je vais chercher votre solution car il y a plus de fonctions de type FOO, que j'ai omis pour la brièveté. Je dois également utiliser l'emballage plusieurs fois sur mon code et dynamique semble trop en ligne.
Je suis réticent à le suggérer, mais comme vous ne pouvez pas modifier la bibliothèque. Si ce n'est pas critique de performance, rappelez-vous le mot-clé code> dynamique :) Edit: dans tous les autres cas, personnellement je l'utilise lambdas similaire à ce qui dasblinkenlight a montré - pour obtenir le contrôle de la compilation. Il peut être facilement autogenréé, c'est-à-dire avec T4S ou tout autre générateur de texte. P> P>
Vous pouvez créer une hiérarchie parallèle qui contient la méthode édition: ceci est essentiellement la même chose que Cette réponse p> p> foo () code> au niveau de la racine.
Utilisation des méthodes d'usine Vous pouvez créer une instance d'emballage pour l'un ou l'autre type. Pour que cela fonctionne, vous devez connaître le type exact de votre instance code> lorsque vous appelez la méthode d'usine
Je suppose que le problème principal est que
foo code> n'est pasvirtuel code> dansA code>, non?