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 :

Question sur l'héritage


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Question sur l'héritage
    Hello,

    Une petite question rapide sur la notion d'héritage histoire d'être sûr que ce je fais est correct.

    Voici la mise en situation :

    Une classe P :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class P
        Public Property Id as Integer
        Public Property Type as Object
     
        Public Sub New(ByVal id as Integer, ByVal type as Object)
            Me.Id = id
            Me.Type = type
        End Sub
    End Class
    Une classe F :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class F
        Inherits P
     
        Public Overloads Property Type as MonObject
     
        Public Sub New(ByVal id as Integer, ByVal type as MonObject)
            MyBase.New(id, type)
        End Sub
    End Class

    Est-ce que j'ai le droit de faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim id as integer = un_id_qui_va_bien
    dim type as MonObject = un_type_qui_va_bien
     
    Dim test as P
     
    test = New F(id, type)
    Cela ne me génère pas d'erreur mais je voulais savoir ce qu'il se passait exactement.
    Vu le faible niveau de complexité des applications que je développe habituellement, c'est la première fois que j'utilise l'héritage et je voulais savoir si c'était ok de faire cela. J'ai trouvé des tonnes d'articles sur la POO et l'héritage mais rien qui parle explicitement de ma question...

    Si vous un lien vers un article qui explique tout en détail, je suis preneur.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 197
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Est-ce que j'ai le droit de faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim id as integer = un_id_qui_va_bien
    dim type as MonObject = un_type_qui_va_bien
     
    Dim test as P
     
    test = New F(id, type)
    Oui, il va appeler le constructeur de F et le stocker dans la variable test de type P

    ca revient a faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim f As F
    dim p As P
    f = new F(id,type)
    p= f

  3. #3
    Membre expérimenté
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Et que se passe-t-il si la classe F a des propriétés qui ne se retrouvent pas dans la classe P ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 197
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Et que se passe-t-il si la classe F a des propriétés qui ne se retrouvent pas dans la classe P ?
    Il faudra caster pour pouvoir atteindre cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    test.ChildMethod() // n'est pas valide
    DirectCast(test,F).ChildMethod() // ok
    f = test
    f.ChieldMethod();
    tu peux faire aussi des tests pour voir si test est bien du type F et non du type P

  5. #5
    Membre expérimenté
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Le casting me semble tout à fait logique.

    Je voulais juste être sûr que je n'allais pas perdre des infos.

    Mais ça semble être une pratique normale (courante?) donc je ne m'inquiète pas.

    Merci

  6. #6
    Membre expérimenté
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je remonte et ré-ouvre cette discussion car je suis tombé sur un os.

    Voici un peu de code (assez basique je pense) :
    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
    Public Class Commande
     
        Public Property Id As Integer
        Public Property Fournisseur As Fournisseur
        Public Property Details As List(Of CommandeDetail)
     
        Public Sub New(ByVal id As Integer)
            Me.Id = id
            Me.Details = New List(Of CommandeDetail)
        End Sub
     
    End Class
     
    Public Class CommandeDetail
     
        Public Property Id As Integer
        Public Property Support As TypeSupport
        Public Property RangeStart As Integer
        Public Property RangeStop As Integer
        Public Property Type As Object
     
        Public Enum TypeSupport As Byte
            CRD = 1
            CHQ = 2
        End Enum
     
        Public Sub New(ByVal id As Integer, ByVal support As TypeSupport, ByVal min As Integer, ByVal max As Integer, ByVal type As Object)
            Me.Id = id
            Me.Support = support
            Me.RangeStart = min
            Me.RangeStop = max
            Me.Type = type
        End Sub
    End Class
     
    Public Class CommandeDetailCarte
        Inherits CommandeDetail
     
        Public Overloads Property Type As TypeCarte
        Public Property Rechargeable As Boolean
     
        Public Sub New(ByVal id As Integer, ByVal support As TypeSupport, ByVal min As Integer, ByVal max As Integer, ByVal type As TypeCarte, ByVal rechargeable As Boolean)
            MyBase.New(id, support, min, max, type)
            Me.Rechargeable = rechargeable
        End Sub
    End Class
     
    Public Class CommandeDetailCheque
        Inherits CommandeDetail
     
        Public Overloads Property Type As Integer
        Public Property Year As Integer
     
        Public Sub New(ByVal id As Integer, ByVal support As TypeSupport, ByVal min As Integer, ByVal max As Integer, ByVal type As Integer, ByVal annee As Integer)
            MyBase.New(id, support, min, max, type)
            Me.Year = annee
        End Sub
    End Class
    Ma question:
    Quelque part dans un évènement click quelconque, je fais ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                Dim details As New List(Of GIFT_MANAGER_DTO.CommandeDetail)
                Dim detail As GIFT_MANAGER_DTO.CommandeDetail
     
                detail = New GIFT_MANAGER_DTO.CommandeDetailCarte(toutes les variables qui vont bien)
                details.Add(detail)
    Ensuite, un peu plus loin, je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            For Each dtl As GIFT_MANAGER_DTO.CommandeDetail In details
                If dtl.Support = GIFT_MANAGER_DTO.CommandeDetail.TypeSupport.CRD Then
                    Dim dtlCarte As GIFT_MANAGER_DTO.CommandeDetailCarte = DirectCast(dtl, GIFT_MANAGER_DTO.CommandeDetailCarte)
                    'le traitement qui va bien
                End If
            Next
    Pourquoi est-ce dans la variable dtlCarte, la propriété Type est à nothing au lieu de contenir l'info qui a été passé au moment de l'instanciation ?

    Merci d'avance.

Discussions similaires

  1. Questions sur l'héritage multiple
    Par beegees dans le forum C++
    Réponses: 12
    Dernier message: 31/03/2008, 17h01
  2. Question sur l'héritage (débutant en C++)
    Par beegees dans le forum C++
    Réponses: 19
    Dernier message: 30/03/2008, 14h45
  3. petite question sur l'héritage et les cast
    Par baedal dans le forum Langage
    Réponses: 3
    Dernier message: 29/02/2008, 00h48
  4. Questions sur l'héritage dans Matisse
    Par Cassios dans le forum NetBeans
    Réponses: 8
    Dernier message: 14/03/2007, 23h23
  5. Question sur l'héritage
    Par the big ben 5 dans le forum Delphi
    Réponses: 28
    Dernier message: 06/06/2006, 17h27

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