Generic avec de l'héritage

Signaler
Messages postés
5
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
21 février 2007
-
Messages postés
5
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
21 février 2007
-
Bonjour,

J'ai une classe B qui hérite de A. Je voudrais avoir un moyen pour dire que pour une classe generic<T>, generic hérite de generic.

J'ai essayé en créant une classe générique et en spécifiant que la classe T doit dériver de A mais si je fais

classe classeDeA=new Classe() cela ne compile pas...

une solution???

merci
A voir également:

10 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
Bonjour,

je pense que tu n'a pas tout compris aux generics !

en fait, les générics sont là pour éviter d'écrire x fois la même classe avec des types différents... mais aucune relation ne lie les classes entres-elles en fonctionne du type.

En gros : tu peux avoir A : B (A hérite de B)
mais dans ta TaClasse<T> a ses propres "propriétés" (caractéristiques)

Ce n'est pas parce que A : B que TaClasseblog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
5
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
21 février 2007

Bonjour,

en fait j'essaye de transposer ce que en java 1.5 il appelle la "wildcard" .
donc d'aprés ce que tu me dis il m'est impossible d'avoir cette propriété...

Plus précisement ce qui m'interesse c'est d'avoir A:B et donc que list:list (ce qui est possible en java 1.5)

 Clem
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
non... ce n'est pas transitif...

un exemple qui ressemble :

prends ces 2 formules :
f(x) x² et g(x) 2x

on a bien g(x) = f'(x)
pourtant cos(g(x)) != (cos(f(x))'

tu vois où je veux en venir ?

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
5
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
21 février 2007

oui oui je vois bien ce que tu veux dire...

en fait je voudrais réaliser ce qui est décrit ci-dessous en java, mais je ne sais pas si cela est possible en c#...

// copiage de la page web
Type de substitution

Problème : pour permettre l'utilisation de tout type, on peut écrire :

<tt>Essai<Object></tt>

Ceci est un leurre !

La classe <tt>Essai</tt> n'acceptera que les <tt>Object</tt>, et non ses sous-classes.

Pour résoudre ce problème, java 1.5 propose le type de substitution (wildcard). Il est noté <tt>?</tt>

<tt>Essai<?></tt>

On peut accéder à ces éléments grâce au type <tt>Object</tt>, mais pas par un autre...

 

Sous-types génériques

Si seuls les sous-type d'un type donné sont acceptables, on peut limiter à cette hiérarchie par :

<tt>Essai<? extends Type></tt>

Exemple

Dessiner une liste de figures géométriques

public static void dessiner(ArrayList<? extends Figure> figures)
{ for (Figure f : figures) // nouvelle boucle
System.out.println(f); // ici, il est impossible de remplir la liste
}

ArrayList<Figure> figures = new ArrayList<Figure>();
figures.add(new Figure("Rectangle")); // ici on peut remplir la liste
figures.add(new Figure("Cercle"));
figures.add(new Figure("Triangle"));
dessiner(figures);

Sortie

Rectangle
Cercle
Triangle

// code provenant de ce site

http://www.dil.univ-mrs.fr/~gispert/enseignement/java/coursJava/12Java15.html

grossomodo j'ai une méthode qui prend comme argument une liste de classe qui hérite d'une autre classe et cet argument doit respecter ce schéma...

voila ce que j'aimerais reproduire...

Clem
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
oui... donc, ca n'a rien à voir avec ce que tu expliquais précédemment !

l'exemple ci-dessus montre :

List<FigureGeometrique> et on rempli avec Cercle, Rectangle et Triangle qui hérite de FigureGeometrique...

donc, la déclaration est

public List<T> where T : FigureGeometrique

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Rhalala le java, j'en garde pas que des bons souvenirs ^^
Sinon pour ce que tu veux faire, si j'ai bien compris ça sera réaliable avec le mot clef where (voire doc)

<hr />
-Blog-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Oups

<hr />
-Blog-
Messages postés
5
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
21 février 2007

oki merci c'est gentil...

et pour finir avec de l'héritage pas trop en rapport... est-ce possible de faire de l'héritage en diamant en c# comme en C++??
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
euh... de l'héritage multiple ?

genre : public class Toto : Titi, Tutu, Tata {}

Non.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
5
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
21 février 2007

autant pour moi l'héritage en diamant est propre au langage qui supporte l'héritage multiple donc pas sur le c#...

merci de ta patience

clém