C'est une question de syntaxe. J'ai une classe générique qui hérite d'une classe de base générique et applique une contrainte à l'un des paramètres de type. Je souhaite également que la classe dérivée implémente une interface. Pour la vie de moi, je n'arrive pas à trouver la syntaxe correcte.
Voici ce que j'ai:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
La première chose qui m'est venue à l'esprit était la suivante:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Mais c'est incorrect car cela oblige T2 à implémenter à la fois IBar et IFoo, et non DerivedFoo pour implémenter IFoo.
J'ai essayé un peu de googler, d'utiliser des deux-points, des points-virgules, etc., mais je suis arrivé à court. Je suis sûr que la réponse est très simple.
c#
generics
inheritance
interface
constraints
Dan Rigby
la source
la source
Réponses:
Vous incluez la signature entière de votre classe avant de définir des contraintes génériques.
la source
where T2 : IBar, IFoo
signifie simplement qu'ilT2
faut implémenter les deux interfaces au lieu de l'DerivedFoo<T1,T2>
implémenterIFoo
Ma recommandation: lorsque vous avez une question sur la syntaxe du langage C #, lisez la spécification; c'est pourquoi nous le publions. Vous voudrez lire la section 10.1.
Pour répondre à votre question spécifique, l'ordre des choses dans une déclaration de classe est:
Tout sur cette liste est facultatif à l'exception de "classe", le nom et le corps, mais tout doit apparaître dans cet ordre s'il apparaît.
la source
la source
Ceci est une extension des réponses existantes. Il est par défaut
string
si vous ne fournissez pas de type. Je n'ai pas implémenté d'interface mais cela ne devrait nécessiter rien de différent que d'habitude.la source