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 :

Classes enfants d'une classe ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut Classes enfants d'une classe ?
    Bonjour,
    Quelle est la syntaxe pour créer une sous-classe dans une classe en vb.net et l'appeler ensuite dans le code ?

    Je m'explique, j'ai une classe définie avec des propriétés et j'aimerais créer une classe à l'intérieur avec ses propres propriétés. En fait, sur mon site web en ASP.NET, j'ai créé un objet boutique, mais selon le mode de paiement, j'aimerais pouvoir créer des sous-classes dans ma classe boutique afin de pouvoir créer des propriétés et fonctions propres à chaque mode de paiement de la boutique.

    Je voudrais un truc comme ça (exemple, ce que je voudrais faire est en rouge) :

    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
    Public Class Boutique
        Private myvar1 As String = "87878711"
        Private myvar2 As String = "656654"
        ...
    
        Public ReadOnly Property var1() As String
            Get
                Return myvar1
            End Get
        End Property
        Public ReadOnly Property var2() As String
            Get
                Return myvar2
            End Get
        End Property
        ...
    
       Public Function BouticIsValid() As boolean
          .....
          return boolmyvar
       End Function
       
       ....etc....
    
    
       Public Class ModePayment1
          Private mode1var1 As String = "87878711"
          ....
          
          Public Sub ValiderPayement()
            ...
          End Sub
          
       End class
    
    End Class

    Et ensuite, comment appeler la procédure ValiderPayement() dans ma page web dans le code behind ??? J'ai essayer un truc comme ça mais en vain .... je ne trouve pas d'infos sur les cours vb.net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim objBoutique As New Boutique
    objBoutique.ModePayment1.ValiderPayement() 

    Merci par avance.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Tu as effectivement créé une inner-class ModePayement1 mais tu ne l'as jamais instancié. Ta classe boutique doit posséder une propriété de type ModePayment1. Je t'invite à lire un tutorial sur les bases de VB.Net

  3. #3
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Ben oui, je vient de me mettre à vb.net et je ne trouve pas d'exemples à ce sujet. Je n'ai pas de soucis pour créer une classe mais ce problème là je ne comprend pas comment vb fonctionne par rapport à ça. Le fait de créer un objet dans l'objet boutique, lorsque je crée une déclare une nouvelle variable du type boutique avec new, vb.net ne crée-t-il pas les objets enfants à l'intérieur de la classe parente ?

  4. #4
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    merci Nicolas pour ta réponse. Je ne savais pas trop si c'était faisable. Il me semblait que l'on pouvait créer des sous-objets à volonté ....
    Je vais essayer comme ça alors.
    Merci.

  5. #5
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Des classes dans des classes, je n'ai jamais vu.
    Et je n'en vois pas l'intérêt.

  6. #6
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    mon idée était de pouvoir créer des objets dans mon objet boutique afin de pouvoir avoir directement accès aux valeurs des variables de l'objet boutique (comme son identifiant etc ...).
    En fait, je voulais avoir quelque chose dans ce style au final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    objBoutic.ModePaymentCarte.ValiderPayement()
     
    objBoutic.ModePaymentCheque.ValiderPayement()
    ...parcequ'en fait, pour mon sous-objet ModePaymentCarte je voulais créer des variables et fonctions (valeurs des variables de retour de la banque, traitement de sécurité divers, validation du paiement ...etc) dont je n'ai pas besoin pour l'objet ModePaymentCheque mais qui tous deux utilisent des valeurs des variables déclarées dans l'objet boutique (identifiant etc ...).

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Dis-nous de quel langage tu viens ça sera plus facile ...

    Des classes dans les classes c'est des choses qui se font tous les jours, c'est juste une question de vocabulaire.

    Voilà comment j'aborderai la chose

    Une classe boutique avec une propriété LeModeDePaiement de type ModeDePayement

    ModeDepayement étant une classe générique qui possède une méthode ValiderPaiement

    Des classes (mode1, mode2) héritant de ModeDePayement qui implémentent réellement la méthode ValiderPaiement

    Quand l'utilisateur va choisir un mode de paiement, le programme instanciera un objet du type qui va bien (mode1 ou mode2 etc ...)

    Ensuite il attribuera à la propriété lemodedepaiement de l'objet boutique cet objet

    Puis il appellera Boutique.lemodepaiement.validerpayement

    C'est toute la magie du polymorphisme!!

  8. #8
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Je viens d'ASP tout court. Soit vbscript/javascript ....etc....
    Gros changement pour moi donc.

  9. #9
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Des classes dans les classes c'est des choses qui se font tous les jours, c'est juste une question de vocabulaire.
    Comme tu dis, question de vocabulaire :-).

    Peut-être déclarer tes variables en public, en début de class ?

  10. #10
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Citation Envoyé par Geo2A Voir le message
    Bonjour,

    Dis-nous de quel langage tu viens ça sera plus facile ...

    Des classes dans les classes c'est des choses qui se font tous les jours, c'est juste une question de vocabulaire.

    Voilà comment j'aborderai la chose

    Une classe boutique avec une propriété LeModeDePaiement de type ModeDePayement

    ModeDepayement étant une classe générique qui possède une méthode ValiderPaiement

    Des classes (mode1, mode2) héritant de ModeDePayement qui implémentent réellement la méthode ValiderPaiement

    Quand l'utilisateur va choisir un mode de paiement, le programme instanciera un objet du type qui va bien (mode1 ou mode2 etc ...)

    Ensuite il attribuera à la propriété lemodedepaiement de l'objet boutique cet objet

    Puis il appellera Boutique.lemodepaiement.validerpayement

    C'est toute la magie du polymorphisme!!

    Merci pour ta réponse.
    j'avoue que ta réponse me parait logique mais je sèche un peu pour le coup. Je pense que je vais y arriver mais il me faut regarder ça de plus près. Pour le moment, je suis un peu dans le flou.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Pti cadeau.
    Voilà pour le passage de paramètres

    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
     
    Public Class boutique
        'Memoire du type de payement de ton instance boutique
        Private ModePay As ModePayement
     
        'Tu choisis ton mode
        Public Sub ChoosePayment(ByVal Mode As Integer)
            If ModePay Is Nothing Then
                ModePay = New ModePayement
                Select Case Mode
                    Case 0
                        ModePay.Set_Parametres_Differents_entre_les_modes_de_payement(1, 2)
                    Case 1
                        ModePay.Set_Parametres_Differents_entre_les_modes_de_payement(3, 4)
                End Select
            End If
        End Sub
        ' tu rend ta validation
        Public Function validate() As Boolean
            If Not ModePay Is Nothing Then
                Return ModePay.Validate
            Else
                Throw New Exception("Pas d'instance de classe ModePayement créée")
            End If
        End Function
     
        'Tu changes ton mode de payement
        Public Sub ChangeMode(ByVal Mode As Integer)
            ModePay = Nothing
            ChoosePayment(Mode)
        End Sub
    End Class
     
    'Ta classe de mode de payement
    Friend Class ModePayement
        'tu déclares tes différences entres tes modes de payements
        Private différence1 As Integer
        Private différence2 As Integer
     
        'L'instance est créé ici
        Friend Sub New()
            MyBase.New()
        End Sub
     
        'Tu différencie tes modes de payement ici
        Friend Sub Set_Parametres_Differents_entre_les_modes_de_payement(ByVal diff1 As Integer, ByVal diff2 As Integer)
            différence1 = diff1
            différence2 = diff2
        End Sub
     
        Friend Function Validate() As Boolean
            Try
                'Ton truc de validation
                Dim Test As Boolean = True
                Return Test
            Catch ex As Exception
                'Au cas ou
                Return False
            End Try
     
        End Function
    End Class
    Voilà comme ca tu peux passer des parametres et tout et tout. J'ai pas vérifier mais l'idée est là.

    Nicolas

  12. #12
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Merci beaucoup nicohutse pour ce code
    ça va me permettre de mieux comprendre.
    Merci.

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Une classe boutique

    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
    Public Class Boutique
     
        Private mLemodeDePayement As ModePayement
        Public Property LemodeDePayement() As ModePayement
            Get
                Return mLemodeDePayement
            End Get
            Set(ByVal value As ModePayement)
                mLemodeDePayement = value
            End Set
        End Property
     
     
        Private myvar1 As String = "87878711"
        Private myvar2 As String = "656654"
     
        Public ReadOnly Property var1() As String
            Get
                Return myvar1
            End Get
        End Property
        Public ReadOnly Property var2() As String
            Get
                Return myvar2
            End Get
        End Property
     
    End Class
    Une classe générique de mode de payement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Class ModePayement
        Public Overridable Sub ValiderPayement()
    'rien
        End Sub
    End Class
    Deux classes Mode1 et mode2 qui héritent de la précédente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Mode1
        Inherits ModePayement
     
        Public Overrides Sub ValiderPayement()
            'ici ton code pour le mode de payement 1
        End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Mode2
        Inherits ModePayement
     
        Public Overrides Sub ValiderPayement()
            'ici le code pour le type 2
        End Sub
    End Class

    Mettons en pratique dans une form avec 2 boutons si je clique sur 1 je prends le mode de payement 1 si je clique sur le button 2 etc...

    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
    Public Class Form1
        Private maboutique As Boutique
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            maboutique = New Boutique
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim lemode As New Mode1
     
            maboutique.LemodeDePayement = lemode
     
            maboutique.LemodeDePayement.ValiderPayement()
     
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim lemode As New Mode2
     
            maboutique.LemodeDePayement = lemode
     
            maboutique.LemodeDePayement.ValiderPayement()
     
        End Sub
    End Class

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Bonjour,

    Je ne sais pas si cela te convient mais je ferais de la manière suivante:


    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
     
    Public Class Boutique
        Private myvar1 As String = "87878711"
        Private myvar2 As String = "656654"
        ...
     
        Public ReadOnly Property var1() As String
            Get
                Return myvar1
            End Get
        End Property
        Public ReadOnly Property var2() As String
            Get
                Return myvar2
            End Get
        End Property
        ...
     
       Public Function BouticIsValid() As boolean
          .....
          return boolmyvar
       End Function
     
       ....etc....
     
    Public Function SelectModePayment1() as ModePayment1
    dim modPayment as New ModePayment1
    return modPayment
    End Function
     
    End Class
     
    Public Class ModePayment1
          Private mode1var1 As String = "87878711"
          ....
     
          Public Sub ValiderPayement()
            ...
          End Sub
     
       End class
    Des classes dans des classes, je n'ai jamais vu.

    Nicolas

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2012, 14h58
  2. Réponses: 21
    Dernier message: 14/01/2010, 12h50
  3. Réponses: 7
    Dernier message: 25/08/2008, 16h13
  4. Réponses: 2
    Dernier message: 02/02/2008, 07h37
  5. Réponses: 8
    Dernier message: 20/07/2007, 14h28

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