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 :

Variables personnalisées en 3 versions (Original, Current, Modified)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut Variables personnalisées en 3 versions (Original, Current, Modified)
    Bonjour à tous,
    Dans une procédure bien spécifique j'ai besoin de travailler avec des variables qui peuvent posséder 3 versions de valeurs un peu à la manière des lignes ADO.NET qui permettent de lire les valeurs Original, Current et Modified.
    Je ne suis pas loin d'y parvenir mais je but sur un problème lorsqu'il s'agit de spécifier le type de données à passer à ma procédure puisque je ne le connait pas à l'avance.
    A noter que dans l'argument 'Value' je passe une valeur issue de la lecture d'une table ADO.NET qui peut prendre la valeur DBNull, dans ce cas la version Original prendra la valeur Nothing.

    Voici le code que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        Public Structure TypeString
            Dim Original As String
            Dim Current As String
            Dim Modified As String
        End Structure
        Public Structure TypeBoolean
            Dim Original As Boolean
            Dim Current As Boolean
            Dim Modified As Boolean
        End Structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim MyString As TypeString = SetVariable(Row("Col1"), "")
    Dim MyBoolean as TypeBoolean = SetVariable(Row("Col2"), False)
        Private Function SetVariable(ByVal Value As Object, ByVal Defaut As Object) As Object
            Dim variable As ???????? = Nothing ' Ici je doit spécifier le type de variable.
            If Values Is DBNull.Value Then
                variable.Original = Nothing
                variable.Current = Defaut
            Else
                variable.Original = Values
                variable.Current = Values
            End If
            Return variable
        End Function
    je n'ai encore rien figé à ce niveau là et tout est encore possible j'espère que vous pourrait m'aider.

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Et avec unse structure générique, par exemple.

    En C# (désolé, je ne connais pas VB, mais je pense que c'est facile à comprendre)
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       public struct Versioning<T>
       {
           public T Original { get; set; }
     
           public T Current { get; set; }
     
           public T Modified { get; set; }
       }

    Tu peux l'instancier comme ça par exemple:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var test = new Versioning<int> { Current = variable, Original = variable == DBNull.Value ? default(int) : variable };

    Evidemment, tu peux aussi faire une version générique de ta méthode SetVariable.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Bonjour et merci pour la réponse,
    Quelqu'un peut confirmer que je ne me suis pas trompé dans la traduction en VB.NET ?
    je trouve mon code très long par rapport à C#

    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
        Public Structure Versioning(Of T)
            Dim _Original As T
            Dim _Current As T
            Dim _Modified As T
            Public Property Original As T
                Get
                    Return _Original
                End Get
                Set(value As T)
                    _Original = value
                End Set
            End Property
            Public Property Current As T
                Get
                    Return _Current
                End Get
                Set(value As T)
                    _Current = value
                End Set
            End Property
            Public Property Modified As T
                Get
                    Return _Modified
                End Get
                Set(value As T)
                    _Modified = value
                End Set
            End Property
        End Structure
    Edit
    Je suis perdu en C#, j'ai aussi du mal à traduire la ligne pour instancier
    Si quelqu'un peux m'aider ça serait super.

  4. #4
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Salut,
    J'utiliserais peut être plus une classe au lieu d'une structure qui est obsolète en .net:
    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
        Class MyVar(Of T)
            Public Property Original As T
            Public Property Current As T
            Public Property Modified As T
        End Class
     
        Class Test
     
            Sub Main()
                Dim var As New MyVar(Of Boolean) With
                    {
                        .Original = True,
                        .Current = False,
                        .Modified = False
                    }
     
                Dim var2 As New MyVar(Of String)
                var2.Original = "plup"
                var2.Current = "plop"
                var2.Modified = "plap"
            End Sub
     
        End Class

  5. #5
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Citation Envoyé par -N4w4k- Voir le message
    au lieu d'une structure qui est obsolète en .net
    D'où tu sort ça. Les structures ont leurs utilisations, rares certes mais ça peut servir.

  6. #6
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Arf, j'étais persuadé à force de l'entendre, ou de mal écouter..
    Désolé pour la fausse info

    Je vais relire le cours

    Edit
    En effet, d'après msdn:
    When you are defining a container type, consider the following criteria.

    A structure can be preferable when:
    • You have a small amount of data and simply want the equivalent of the UDT (user-defined type) of previous versions of Visual Basic
    • You perform a large number of operations on each instance and would incur performance degradation with heap management
    • You have no need to inherit the structure or to specialize functionality among its instances
    • You do not box and unbox the structure
    • You are passing blittable data across a managed/unmanaged boundary


    A class is preferable when:
    • You need to use inheritance and polymorphism
    • You need to initialize one or more members at creation time
    • You need to supply an unparameterized constructor
    • You need unlimited event handling support

    If your container type does not fit clearly into either of these categories, define a Class. Classes are more flexible than structures, and the storage and performance differences are often negligible. Structures are intended primarily for types that behave like built-in types, not necessarily for general-purpose use.
    Je referme la parenthèse. Merci d'avoir rectifié le tir meziantou

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Merci de vouloir m'aider mais je suis dans l'impasse.
    En effet avec les génériques il n'est pas possible d'utiliser les opérateurs =, <>....etc
    Par exemple si je veux comparer en faisant ca : If MyVariable.Original <> MyVariable.Current then....l'éditeur de VS n'accepte pas cette synthaxe avec des types génériques.
    Donc ce que je veux faire perd tout sont intérêt.
    Si quelqu'un à une autre idée je suis preneur mais je crois que ce n'est pas possible. A l'origine je voulais faire des procédures génériques pour manipuler des variables qui peuvent être des types différents comme ceux la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim MaVariable1Original as String
    Dim MaVariable1Current as String
    Dim MaVariable1Modified as String
    Dim MaVariable2Original as Boolean
    Dim MaVariable2Current as Boolean
    Dim MaVariable2Modified as Boolean
    EDIT : Bien sûre, je compare des string avec des string et des Boolean avec des Boolean.....

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

Discussions similaires

  1. [Autres] Variable personnalisée dans Google analytics
    Par shakly dans le forum APIs Google
    Réponses: 0
    Dernier message: 03/04/2013, 15h21
  2. Variable d'une boucle qui ne se modifie pas
    Par Erast dans le forum Débuter
    Réponses: 4
    Dernier message: 17/04/2010, 20h25
  3. Réponses: 1
    Dernier message: 07/08/2008, 15h55
  4. Réponses: 4
    Dernier message: 07/07/2006, 17h48

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