Hériter d'une classe générique de base, appliquer une contrainte, et de mettre en œuvre une interface en C#
C'est une question de syntaxe. J'ai une classe générique qui hérite d'une classe générique de base et l'application d'une contrainte à l'un des paramètres de type. Je tiens aussi à la classe dérivée pour implémenter une interface. Pour la vie de moi, je n'arrive pas à trouver la syntaxe correcte.
C'est ce que j'ai:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
La première chose qui m'est venue à l'esprit était présent:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Mais c'est incorrect en tant que causes T2 à la nécessité de mettre en œuvre les deux IBar et IFoo, pas DerivedFoo à mettre en œuvre IFoo.
J'ai essayé un peu de Googling, l'utilisation des deux-points, points-virgules, etc, mais j'ai tourné court. Je suis sûr que la réponse est à la tête slappingly simple.
- Je ne pouvais pas comprendre @Adam de réponse quand j'ai regardé une fois mais après 2minutes j'ai pu obtenir ce que c'est, merci pour la réponse. Dérivée de la classe a plus d'une mise en œuvre peut-être que c'est le point. De toute façon j'en veux pour preuve sa notation pour les autres. "classe DerivedClass<Type> : Myclass où Type : IType" . Rien ne doit être entre la dernière classe implémentée et la clause where.
Vous devez vous connecter pour publier un commentaire.
Vous comprennent l'ensemble de la signature de votre classe avant de définir des contraintes génériques.
where T2 : IBar, IFoo
signifie simplement queT2
doit implémenter deux interfaces au lieu deDerivedFoo<T1,T2>
la mise en œuvre deIFoo
Ma recommandation: lorsque vous avez une question à propos de la syntaxe du langage C#, lire le cahier des charges; c'est pourquoi nous le publions. Vous aurez envie de 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 facultative, sauf pour la "classe", le nom, et le corps, mais tout doit apparaître dans cet ordre si elle apparaît.
C'est une extension du réponses. La valeur par défaut est
string
si vous ne fournissez pas un type. Je n'ai pas implémenter une interface, mais qui ne devrait pas être quelque chose de différent que d'habitude.