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 :

IList, ObservableCollection, polymorphisme et cast


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut IList, ObservableCollection, polymorphisme et cast
    Bonjour,

    J'ai un petit souci et je ne comprends pas pourquoi.
    Soient A et B deux classes avec B qui héritent de A

    J'ai une liste déclarée comme suis :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    IList<B>listeDeB = new ObservableCollection<B>();

    J'ai une méthode avec le prototype suivant :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    void MaMethode(IList<A> uneListe);

    Je n'arrive pas à faire
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    MaMethode(listeDeB);
    (methode has some invalide argument).

    Déjà là je ne comprends pas bien, puisque B hérite de A, je devrais pouvoir l'appeler, mais admettons. Je caste donc ma liste ainsi :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    MaMethode((IList<A>)listeDeB)
    et là j'obtiens :
    Unable to cast object of type 'System.Collections.ObjectModel.ObservableCollection to type 'System.Collections.Generic.IList

    Hum... Quelqu'un peut m'expliquer ?

  2. #2
    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
    Bonjour

    Si tu es en framework 3.5, il n'y a pas de solution directe à ton problème.

    Si tu es en 4.0 ou + , je te suggère d'aller voir les notions de covariance et contravariance de généricité.

    Ici :

    http://msdn.microsoft.com/fr-fr/library/dd799517.aspx

  3. #3
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705

  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 GuruuMeditation Voir le message
    Désolé , je ne connaissais pas ton article sur le sujet, sinon c'est celui que j'aurais mis en lien

  5. #5
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut
    Je suis en 3.5 et je ne peux pas passer en 4.

    Alors je fais quoi moi

    Au passage, je tiens pas particulièrement à IList, je peux mettre ce que vous voulez à la place, par contre j'ai besoin de mon ObservableCollection.

    Si je mets ICollection partout à la place de IList, ça va marcher ?

  6. #6
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut
    En fait là j'ai un héritage à la fois au niveau de l'objet et de la collection, si je mets partout la collection et que j'ai plus qu'un héritage sur l'objet, ça marcherait ?

    Edit : Visiblement non, j'ai mis ObservableCollection<> partout et il me dit que l'argument est invalide si je cast pas, et qu'il peut pas caster si je mets (ObservableCollection<A>) devant la listObservableCollection<B>

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

Discussions similaires

  1. Polymorphisme en évitant les casts
    Par dagera dans le forum Langage
    Réponses: 14
    Dernier message: 14/10/2011, 18h36
  2. Réponses: 2
    Dernier message: 05/01/2010, 11h21
  3. Réponses: 10
    Dernier message: 17/07/2008, 20h01
  4. Polymorphisme et cast dynamique
    Par vcoulon dans le forum C++
    Réponses: 16
    Dernier message: 21/03/2007, 14h03
  5. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49

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