Implémenter une interface générique dans une classe abstraite générique ? [Résolu]

Signaler
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
-
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
-
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

Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
10
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...
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
1
J'ai mis class mais en réalité c'est une classe bien précise.

Merci pour ton aide ;)