Implémenter une interface générique dans une classe abstraite générique ?

Résolu
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 - 8 mars 2012 à 15:38
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 - 17 mars 2012 à 17:41
Bonjour,

J'ai un petit soucis, je n'arrive pas à créer ma classe Derived :

interface IInterface<T> where T : class { }
abstract class Class<T> where T : class, IInterface<T> { }
class Derived : Class<String> { }


j'ai l'erreur suivante :

Le type 'String' ne peut pas être utilisé comme paramètre de type 'T' dans le type ou la méthode générique 'Test.Class<T>'. Il n'y a pas de conversion de référence implicite de 'String' en 'Test.IInterface<String>'.

Quelqu'un peut il me dire comment je dois faire au niveau de ma syntaxe pour que cela fonctionne ?

Merci d'avance .

(vs 2010, frk 4)

2 réponses

MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 11
16 mars 2012 à 14:01
Salut,

ton erreur provient de cette ligne :

abstract class Class<T> where T : class, IInterface<T> { }


Ici il faut d'abord que tu fasse comprendre à ta classe que tu veux qu'elle implémente l'interface et que T doit être de type class.

Pour cela, la précédente ligne devient :

internal abstract class Class<T> : IInterface<T> where T : class { }


Mais à ta place, je retirerais les clauses Where parce que tu verras que si tu souhaite hériter ton objet classe par Double par exemple, tu ne pourras pas, car cette classe (et bien d'autres) ne sont pas des types référence...
3
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
17 mars 2012 à 17:41
J'ai mis class mais en réalité c'est une classe bien précise.

Merci pour ton aide ;)
0