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

EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 8 mars 2012 à 15:38 - Dernière réponse : EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention
- 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)
Afficher la suite 

2 réponses

Répondre au sujet
MasterShadows 269 Messages postés lundi 1 mars 2004Date d'inscription 19 avril 2012 Dernière intervention - 16 mars 2012 à 14:01
+3
Utile
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...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MasterShadows
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 17 mars 2012 à 17:41
0
Utile
J'ai mis class mais en réalité c'est une classe bien précise.

Merci pour ton aide ;)
Commenter la réponse de EmacLi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.