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

Dotnet Discussion :

Impossible de convertir 'MonAutreClasse' en 'MaClasseDeBase'


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut Impossible de convertir 'MonAutreClasse' en 'MaClasseDeBase'
    Bonjour,
    Voilà, je fais de la programmation depuis quelques temps et je pense connaitre assez bien les classes, l'héritage & co.

    J'ai 2 questions :
    1 - Quelles différences y a-t-il entre une classe et une structure ? (ça j'imagine que c'est facile)

    2 - Je cherche à avoir l'organisation suivante :
    Une classe de base a des propriétés et méthodes commune à plusieurs classes dérivées, avec la méthode de l'héritage, je profite bien de tout ça, mais dans ma classe, j'ai une List(Of MaClasseDeBase) sur laquelle mes méthodes s'appuient pour faire des traitements, et le problème réside dans le fait que je cherche à initialisé cette liste de MaClasseDeBase avec des objets qui hérite justement de MaClasseDeBase.

    Un exemple c'est toujours plus parlant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private MustInherit Class MaClasseDeBase
    #Region "Attributs"
        ' Plusieurs attributs, mais c'est celles-ci qui m'intéressent
        Protected _str_Texte As String
        Protected _lof_MaClasseDeBase As List(Of MaClasseDeBase)
    #End Region
     
    #Region "Property"
        ' Plusieurs propriétés, mais c'est celle-ci qui m'intéresse
        Public ReadOnly Property Texte As String
            Get
                Return _str_Texte
            End Get
        End Property
    #End Region
     
        ' Constructeur générique
        Public Sub New(ByVal plof_BaseObjet As List(Of MaClasseDeBase))
            _lof_BaseObjet = plof_BaseObjet
        End Sub
     
        ' Gérérer le texte de l'objet de base
        Protected Sub GenererTexte()
            _str_Texte = ""
            For Each bmcb_MaClasseDeBase As MaClasseDeBase In _lof_BaseObjet
                _str_Texte &= bmcb_BaseObjet.Texte
            Next
        End Sub
        ' Autres méthodes s'appuyant sur MaClasseDeBase sur d'autres attributs
    End Class
     
    Private Class MonAutreClasse
        Inherits BaseObjet
    #Region "Attributs"
        ' Attributs supplémentaires
    #End Region
     
    #Region "Property"
        ' Propriété supplémentaires
    #End Region
     
        Public Sub New()
        End Sub
    End Class
     
    Private Class MaClasse
        Inherits BaseObjet
    #Region "Attributs"
        ' Attributs supplémentaires
    #End Region
     
    #Region "Property"
        ' Propriété supplémentaires
    #End Region
     
        Public Sub New(ByVal plof_MonAutreClasse As List(Of MonAutreClasse))
            MyBase._lof_MaClasseDeBase = plof_MonAutreClasse ' C'est par là que ça coince puisque les objets ne sont pas pareils, je le comprend, mais en même temps, ces objets hérites tous de MaClasseDeBase pour utiliser les méthodes et les propriétés identiques.
        End Sub
    End Class
     
    Public Sub Main()
        Dim llof_MonAutreClasse = New List(Of MonAutreClasse)
        ' Initialisation de la liste de MonAutreClasse
        Dim lmcl_MaClasse = New MaClasse(llof_MonAutreClasse)
    End Sub
    Message d'erreur :
    Impossible de convertir 'MonAutreClasse' en 'MaClasseDeBase'
    La raison profonde de la mise en place de cette structure est que j'ai 5 niveaux de classe héritant de MaClasseDeBase dont MaClasse (niveau n) est instancié avec une liste de MonAutreClasse (niveau n-1) et ainsi de suite jusqu'au niveau n-5

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Hello,

    même si Fille hérite de Mère, une List<Fille> (List ou toute autre classe générique) n'est pas une List<Mère>. cf la MSDN.

    Pourquoi ? Parce que listMère.Add(new Mère()) est correct, alors que listFille.Add(new Mère()) ne l'est pas. On ne peut donc pas traiter une listFille comme une listMère.

    Donc tu dois soit réécrire ton code, soit utiliser des contraintes génériques, soit recourir à la co-variance / contravariance (cette dernière solution n'étant possible que depuis .Net 4)

    Mes exemples ci-dessus ont en C#, je te laisse traduire en VB (langage bien trop bavard à mon goût )

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    OK, c'est bien ce qu'il me semblait... Bon, j'ai fait autrement du coup, pressé par le temps et surtout par la date de fin de la mission qui approchait à grand pas (c'est d'ailleurs pour cela que je ne suis pas revenu sur le site depuis).

    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/08/2007, 11h57
  2. Réponses: 2
    Dernier message: 19/05/2007, 20h51
  3. Impossible de convertir une base 2003 vers 2000
    Par soso78 dans le forum Access
    Réponses: 4
    Dernier message: 07/01/2007, 11h04
  4. Impossible de convertir les sauts de lignes \n en <br> dans une jsp.
    Par michaelcourcy dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/11/2006, 17h32
  5. [XPATH] Impossible de convertir #BOOLEAN en un NodeList
    Par claudyyyyy dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 08/02/2006, 16h00

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