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 :

Collection et héritage


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut Collection et héritage
    Bonjour,

    voici mon problème j'ai une classe A0 dont dérrive une classe A1.
    J'ai une Collection de A1 avec laquelle j'aimerai remplir un collection de A0, or
    Collection<A1> ne dérive pas de Collection<A0>, même si A1 dérive de A0.
    Quel est le moyen de faire cela le plus élegemment possible ? (Notamment si je pouvais éviter d'itérer)
    par avance merci de vos réponses ?

    PS: j'ai mis collection pour être le plus générique possible dan smon cas, je manipule des SortedDictionary<object, A1>

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Contrairement à l'IL, C# ne support pas la variance avec les types génériques. Et je ne connais malheureusement aucun autre moyen que l'itération

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    euh ,

    List<A> toto = new List<A>();
    toto.Add(new B());

    Ca ca marche....

    ou b herite de A

    The Monz, Toulouse

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    euh ,

    List<A> toto = new List<A>();
    toto.Add(new B());
    Oui, mais cela suppose d'itérer car sa question était :

    J'ai une Collection de A1 avec laquelle j'aimerai remplir un collection de A0 ... (Notamment si je pouvais éviter d'itérer)
    A vrai dire, le plus simple dans son cas est de créer un classe CollectionA1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class CollectionA1 : Collection<A1>
    et de surcharger les méthodes Add et AddRange et ajouter un constructeur recevant un paramètre IList<A0>

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    pour une liste, par exemple, pour eviter l'iteration pour ajouter une List<B> à une List<A>, tu peux faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<A> a = new List<A>();
    List<B> b = new List<B>();
    a.AddRange(b.Cast<A>());
    Ca necessite 3.5. Pour note de toutes facons, tu seras obliger d'iterer dans la liste, à un moment ou l'autre (ici, par exemple, c'est le cast qui le fait).

    Si tu n'as pas accès à C# 3, alors un ConvertAll<A> devrait faire le job.

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    Ca necessite 3.5. Pour note de toutes facons, tu seras obliger d'iterer dans la liste, à un moment ou l'autre (ici, par exemple, c'est le cast qui le fait).
    Si le 3.5 le fait sur un item, on doit pouvoir créer une méthode d'extension sur les List pour le faire aussi sur une collection d'item (si j'ai bien compris, car je n'ai VS 2008 que demain, si tout va bien )

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

Discussions similaires

  1. Collections et héritage
    Par kodo dans le forum Langage
    Réponses: 5
    Dernier message: 17/05/2011, 11h25
  2. Collection d'objet et héritage
    Par TSnarfK dans le forum Langage
    Réponses: 3
    Dernier message: 29/03/2010, 17h23
  3. Relation inverse vers une collection avec héritage
    Par Julienoune dans le forum Hibernate
    Réponses: 0
    Dernier message: 18/03/2009, 06h09
  4. Collections et héritage de fiche
    Par Aka Guymelef dans le forum Composants VCL
    Réponses: 3
    Dernier message: 26/11/2008, 16h51
  5. Héritage et Iterateur de Collection
    Par onur dans le forum C++
    Réponses: 6
    Dernier message: 12/04/2006, 00h05

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