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 :

Créer une structure qui évolue


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Par défaut Créer une structure qui évolue
    Bonjour,

    J’ai un composant qui me renvoi des données dans un buffer. Avant de les utiliser, je dois les typer comme une structure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Déclaration d'une structure qui contiendra notre buffer
    'Les variables sont dans l''ordre attendu et avec une longueur fixe
        Structure Struct_Buffer
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public title As String ' string forcé à 256 caractères
            Public num1 As Double
            Public num2 As Integer
        End Structure
    'Le composant m’envoie les données
       Dim s1 As Struct_Buffer = CType(received_data.dwData(0), Struct_Buffer) ' Cast les données reçues avec le bon typage
       MsgBox("Title = " & s1.title) ' on peut lire le titre reçu
    Cela fonctionne très bien. Mon problème c’est que la structure doit pouvoir évoluer suivant le contexte.
    Ainsi j’aimerai pouvoir rajouter ou supprimer une variable.
    Exemple que ma structure devienne, par code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'le titre disparait et on ajoute la variable num3
    Structure Struct_Buffer
            Public num1 As Double
            Public num2 As Integer
            Public num3 As Integer
    End Structure
    Il n’y a pas de méthode pour faire évoluer la structure d’une structure

    Sauriez-vous comment je pourrais avoir un objet de type structure pouvant évoluer ?

    Merci pour vos conseils.

    PS : j'utilise VS 2013 et .NET 4.0

    Dan

  2. #2
    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,

    Il te faut utiliser une classe !
    Par définition une structure est immuable ce qui n'est pas le cas pour une classe, cette dernière peut faire l'objet d'héritage et/ou de créations de 2 constructeurs faisant référence à des propriétés différentes.

    ---> Perso je préférerais utiliser l'héritage :

    La classe de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Class  BaseBuffer
            Property num1 As Double
            Property num2 As Integer
    End Class
    Ton autre classe héritant de la classe de base avec une propriété supplémentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Class Buff
            Inherits BaseBuffer
            Property num3 As Integer
    End Class

    PS : il est bien évidement possible d'instancier en ajoutant des arguments dans la signature du constructeur directement, il s'agit après d'adapter à tes besoins.


    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Par défaut
    Bonjour,

    Merci pour cet input.

    Cependant mon besoin est de pouvoir ajouter des properties dynamiquement.

    En gros cela pourrait ressembler à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' créé un objet BaseBuffer vide
    Public Class BaseBuffer
    End Class
     
    Dim class_baseBuffer As BaseBuffer 'instance de baseBuffer
    class_baseBuffer.Add_New_Property(num1, double) 'ajoute une property
    j'ai trouvé plusieurs articles intéressants sur la possibilité de créer un objet et d'en modifier les membres

    Via ExpandoObject - Thread
    Via IDictionary : https://www.simple-talk.com/dotnet/....jects-in-.net/

    Si vous avez d'autres pistes je suis preneur

    Dan

  4. #4
    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,

    Ca me paraît compliquer de créer dynamiquement des propriétés... Puis à fortiori des les utiliser également de manière dynamique.
    Le but d'une classe étant de manipuler les propriétés...

    Tandis que là... A quoi te serviront tes propriétés dynamique... Tu vas créer le code dynamique dans tes classes ? A l'avance ?

    Car, j'en viens à ma réflexion... Si il s'agit juste de stocker un nombre X de valeurs qui arrivent dans ton buffer...
    Une liste de valeur ne ferait il pas le travail ? Et ta classe travail avec cette liste (dynamique)... et réagis en fonction du nombre d'élément.

    Ou il y a un besoin que je n'ai pas saisi.

  5. #5
    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
    il y a egalement qqch que je n'ai pas saisi.....mais en tout etat de cause je pense davantage qu'il y a des perceptes qui ne te sont pas familier du coup tu penses qu il est necessaire de passer par ton raisonnement...... a voir...
    brefff pour la creation dynamique de types et membres (propriété) il faut creuser du coté de l espace de noms System.Reflection.

    a+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Par défaut
    Bonjour,

    Je vais expliquer un peu plus en détail.

    Comme dit précédemment, je reçois un buffer que je dois caster dans une structure pour obtenir mes variables unitairement.
    Ce que je n'ai pas dit c'est que je ne peux pas prévoir maintenant le type et le nombre de variable que je vais recevoir.
    L'utilisateur paramètre lui-même dans un fichier XML ce dont il a besoin. par exemple 2 integer et 1 double.
    Au démarrage de l'application, je dois donc prévoir la structure (ou la classe) qui va recevoir ces données et la fournir au composant.

    Une liste de valeur ne ferait il pas le travail ? Et ta classe travail avec cette liste (dynamique)
    Non car chaque variable doit être typée et non générique. Je dois "publier" la structure auprès du composant pour qu'il l'a remplisse. Si je ne fournit pas le bon type pour chaque variable (8,16,32...) les résultats sont faux.

    Dans ce cadre là, le PropertyBuilder me semble la solution la plus appropriée.

    Je pensais qu'il y aurait une méthode plus simple pour créer un objet générique et lui attribuer des membres.

    Merci pour votre aide.

    Dan

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    ce n'est pas parce que tu ranges ca dans une collection de valeur au lieu d'une structure que tu vas perdre l'info de taille
    une fois que tu recois tes octets tu découpes toi même sur la structure et tu as l'infos de structure donc peux reexporter selon cette info
    de plus dans un list(of object) un integer restera un integer et un double restera un double et tu peux connaitre le type avec typeof (ou un select case et gettype)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [POO] Créer une structure de données
    Par zulot dans le forum Langage
    Réponses: 10
    Dernier message: 15/08/2006, 12h51
  2. [VBA-E]Créer une feuille qui contient du code
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 04/04/2006, 15h58
  3. Réponses: 12
    Dernier message: 23/03/2006, 14h13
  4. Comment créer une structure de donnée dynamiquement ?
    Par Beaunico dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 09h34
  5. Réponses: 11
    Dernier message: 30/08/2005, 10h50

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