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

VB.NET Discussion :

A propos de l'héritage et des listes


Sujet :

VB.NET

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut A propos de l'héritage et des listes
    Hello,

    Ca doit être tout con mais je sèche...

    Soit une classe A et une classe B où B hérite de A.

    On peut faire sans problème :
    ou le cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim var As New B()
    CType(var, A) 'on est d'accord que cette ligne là sans rien autour ne passe pas, c'est juste pour illustrer le cast
    Par contre, on ne peut apparemment pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim list As List(Of A) = New List(Of B)
    ou le cast équivalent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim list As New List(Of B)
    CType(var, List(Of A) 'même remarque que le cast précédent
    J'aimerais comprendre pourquoi mais surtout, comment arriver à ce que ceci soit accepté.
    Kropernic

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Effectivement ca n'est pas possible.

    La solution consiste soit à caster chaque objet de la liste, soit à utiliser la méthode d'extension Cast(Of ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim listOfB = listOfA.Cast(Of B)().ToList()
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Merci pour l'explication.

    Par contre, VS suggérait d'utiliser des IEnumerable(Of T) plutôt que des listes.

    Du coup j'ai fait les adaptations et avec des IEnumarable, ça passe. Mais si j'ai bien, c'est en fait une sorte de liste plus ou moins read only (pas de méthode add par exemple). Ce qui corroborerait ton explication.

    J'ai juste ?

    N.B. : Je vais tester ta méthode avec le cast car ça me permet de conserver le type List(Of T) dont j'ai besoin
    Kropernic

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tout ce qui est .cast ou autre retourne un ienumerable mais le .tolist permet de retransformer en list et donc de récupérer le .add
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/07/2014, 13h11
  2. [XL-2010] A propos des listes de validation conditionnelles et sans doublon
    Par Invité dans le forum Excel
    Réponses: 0
    Dernier message: 26/01/2011, 13h29
  3. Information et aide à propos des listes liées et de XMLHttpRequest
    Par redpopo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 17h05
  4. [glut] de l'intérêt des listes
    Par khayyam90 dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/07/2004, 10h35
  5. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32

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