IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Modélisation d'héritage de collection d'éléments générique


Sujet :

C#

  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Modélisation d'héritage de collection d'éléments générique
    Bonjour à tous,

    Je cherche à implémenter une collection de collection générique mais je ne capte pas pourquoi cela m'est refusé.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class MaCollection{
        private List<MonElement> elements; //Ici c'est refusé par le compil, pourquoi?
        //j'ai essayé private List<MonElement<>>, mais syntaxiquement cela ne fonctionne pas.
    ....
     
    }
     
    class MonElement<T>{
        private T valeur;
    .....
    }
    Je voudrais que ma liste elements puisque contenir tous les MonElement sans s'inquiéter du type T.
    C'est lorsque j'alimenterai elements que je définirai le type de la nouvelle instance de MonElement.

    Si quelqu'un pouvait m'expliquer pourquoi c'est refusé, et comment contourner le problème. Si je me tourne vers cette solution, c'est pour être le plus générique possible. valeur pourrait être Int32, Double,... même String.

    Merci

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    T'es obligé de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MaCollection<T>{     private List<MonElement<T>> elements; //Ici c'est refusé par le compil, pourquoi?     //j'ai essayé private List<MonElement<>>, mais syntaxiquement cela ne fonctionne pas. ....   }   class MonElement<T>{     private T valeur; ..... }

    Ou sinon faire une classe monelement non générique...

    Bon dév.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je voudrais que ma liste elements puisque contenir tous les MonElement sans s'inquiéter du type T.
    En gros tu voudrais faire un truc comme avec les génériques de Java, genre List<MonElement<?>> ? Ce n'est pas possible en C#, qui a un système plus strict pour les génériques.

    Ce que tu peux faire, c'est faire une classe non générique MonElement, et faire hériter MonElement<T> de MonElement

  4. #4
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut
    Merci à vous.

    [Tomlev] c'est exactement ce que je souhaite faire : List<MonElement<?>>

    Dommage que cela ne soit pas possible en C#. Il faut donc créer une classe mère non générique qui sera utilisée dans la définition de ma liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class MaCollection{
    private List<MonElementNonGénérique> elements;
    }
     
    class MonElementNonGénérique{
    }
     
    class MonElement<T> : MonElementNonGénérique{
    private T valeur;
    }
    Cela me fait rajouter une classe qui ne "servira" rien, excepté pour le problème du post, puisqu'elle ne contiendra rien d'autre (en tout cas actuellement).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] Modélisation concept héritage
    Par ogmalpes dans le forum Schéma
    Réponses: 5
    Dernier message: 20/01/2014, 20h16
  2. [c#] Héritage d'interface et classe générique
    Par NeoKript dans le forum C#
    Réponses: 2
    Dernier message: 26/06/2011, 11h40
  3. [AC-2007] Formulaire pour structure modélisée par héritage
    Par f-leb dans le forum IHM
    Réponses: 3
    Dernier message: 12/06/2009, 09h48
  4. Convertir un élément générique
    Par LordBob dans le forum C
    Réponses: 5
    Dernier message: 02/10/2006, 19h18
  5. [Analysesi]comment modéliser un héritage ?
    Par guitalca dans le forum Outils
    Réponses: 3
    Dernier message: 14/04/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo