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 :

Mettre des structures en tant que propriétés d'une classe


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut Mettre des structures en tant que propriétés d'une classe
    Bonjour,

    J'ai une classe qui contient pas mal de propriétés (avec des Set et Get).
    Pour des raisons de clarté, j'aurais souhaité regrouper les propriétés en utilisant des structures. Mais je n'y arrive pas.

    Est-il possible de le faire ?

    Merci de votre aide.

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Bonjour,

    Si la structure est "à l'intérieur" de la classe, non... Puisque en dehors, on ne sera pas à quoi elle correspond.
    Tu peux essayer de créer une structure dans une classe vide en dehors de ta classe, peut être que ça marche, je sais pas trop

    Sinon, encore plus évident, finalement...
    Plutôt qu'une structure, tu écris une classe publique qui regroupe tes données,
    puis dans ta classe tu créer un objet privé de cette classe, et tu rends disponible cet objet via une propriété publique Get/Set

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Salut,

    Si c'est uniquement tu peux utilsier les regions pour cacher une partie du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #Region "MathFunctions"
        ' tous les getters/setters
    #End Region
    aisin tu auras le petit +- pour plier deplier du code.


    Sinon comme le dit mactwist69, le plus propres consiterait plus a imbriquer une classe pour chaque parties de ta classe mere. En effet si celle-si est si grosse cela veux sans doute dire qu'elle cumule plusieures responsabilites et devrait donc etre decoupee en plusieures classes.

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Comme évoqué par mactwist69 et mermich :

    Il faut diviser pour mieux régner, que ce soit une question de lisibilité, de maintenance, ou de ré utilisabilité de ton code pour un futur projet.

    Ne pas hésiter également à introduire les espaces de noms (Namespace) pour mieux organiser ton projet.

    Ceci étant dit peut-être que tu pourrais simplement nous montrer la classe en question de manière à ce que le débat soit plus enrichissant pour tout un chacun.

    A+

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    En essayant d'assimiler vos réponses, voici ce que j'ai fait.
    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
    Friend Structure Groupe1
        Dim Data1 As String
        Dim Data2 As String
    End Structure
     
    Friend Class TheClasse
    Private _Groupe1 As Groupe1
     
    Friend Property Groupe1 As Groupe1
        Get
            Return _Groupe1
        End Get
     
        Set(ByVal Valeur As Groupe1)
           _Groupe1 = Valeur
        End Set
    End Property
    ...
    End Class
    L'utilisation de la classe se fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' Attribution des valeurs
    Dim MyClasse As New TheClass
    Dim monGroupe1 As New Groupe1
    monGroupe1.Data1 = "test"
    monGroupe1.Data2 = "par défaut"
    MyClasse.Groupe1 = monGroupe1
     
    ' Utilisation
    MyClasse.Groupe1.Data1
    Voilà. Et ca marche.
    L'idée était de regrouper les propriétés de la classe pour éviter les noms à rallonger comme actuellement (ex : Groupe1SousGroupe1NomVariable) et essayer d'avoir plus de clarté.
    Bah je ne sais pas si le but est atteint !

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Lorsque nous évoquions le découpage nous voulions parler de cette possibilité :

    --> Scinder le code de manière à pouvoir ré-utiliser plus tard (pour une raison X ou Y : perso cela m'a toujours sauver la mise de bien découper mes projets ) chaque classe indépendante :

    - Une classe que l'on nomme Container :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Class Container
     
        Public ItsDatas As Datas
     
    End Class
    - Une classe Datas qui pourra être utilisé à n'importe quel moment dans ton projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Class Datas
     
        Public One As String
        Public Two As String
     
    End Class
    --> Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Dim TheContainer As New Container
            TheContainer.ItsDatas = New Datas() With {.One = "Data1", .Two = "Data2"}
     
            MsgBox(TheContainer.ItsDatas.One & vbNewLine & TheContainer.ItsDatas.Two)
    NB : Ainsi tu obtiens un niveau de granularité qui te permettra d'utiliser ces classes ultérieurement, dans le projet, indépendantes les unes des autres.

    ATTENTION : je ne dis pas que cela soit la meilleure pratique car il faudrait connaitre avec exactitude le périmètre de ton projet pour définir si l'on doit utiliser une structure plutôt qu'une classe et/ou des propriétés plutôt que des champs !!


    A+

Discussions similaires

  1. [Batch] Robocopy mettre un fichier en tant que source
    Par jepasderemy dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 02/11/2009, 15h24
  2. Comparer des entiers en tant que string
    Par power of mind dans le forum Langage
    Réponses: 12
    Dernier message: 19/06/2009, 11h54
  3. Réponses: 1
    Dernier message: 14/10/2007, 20h15

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