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 :

problème de compréhension Valeur et référence


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut problème de compréhension Valeur et référence
    Bonjour,

    Avez vous des morceau de code concret avec des variable par "valeur" et par "Référence"
    Il y a un truc qui m’échappe dans le cour de M Lasserre

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 80
    Points : 163
    Points
    163
    Par défaut
    qu'est ce qui t'échappe dans le byref & byval?

    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
     
     
     
    dim ref as string = "toto"
     
    ajouterTexteByval(ref)
     
    dim after as string = ref       'là, ref == "toto"
     
    ajouterTexteByref(ref)
     
    dim after as string = ref       'ici, ref == "bonjour"
     
    sub ajouterTexteByval(byval pReference as String)
     
    pRefernece = "bonjour"
     
    endsub
     
    sub ajouterTexteByref(byref pReference as String)
     
    pRefernece = "bonjour"
     
    endsub

  3. #3
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut
    Voila le soucis

    Dim B = A

    Quand on déclare B et on affecte a A, pour moi B va forcément prendre la valeur ou référence de A.

    je recherche des morceau de code qui pourrai m'aider a comprendre.

  4. #4
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par mickael62800 Voir le message
    Voila le soucis

    Dim B = A

    Quand on déclare B et on affecte a A, pour moi B va forcément prendre la valeur ou référence de A.

    je recherche des morceau de code qui pourrai m'aider a comprendre.
    Bonjour,

    --> Dans un 1er temps :

    on n'affecte pas B à A mais la valeur de A à la variable B (B étant de type Object) !

    --> Dans un seconds temps :

    Dans ton cas de figure (déclaration de variable puis affectation) il n'existe pas de notion "par référence" !

    -- >Enfin :

    L'exemple de myNameIsFlo reste assez explicite. Quant à savoir quand tu devras faire usage du passage par référence puisque d'usage nous utilisons principalement "ByVal" (tout dépends le contexte) tu le sauras lorsque tu en auras besoin.

    A+

  5. #5
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut
    Merci pour vos réponse

    Dans le cours le cours VB.net

    Travaillons sur A et B, 2 variables ayant la même 'nature'
    A existant déja, faisons:

    Dim B=A

    Puis modifions la valeur de A, cela modifie t'il B?

    les variables par valeur ou référence ne réagissent pas de la même manieres:

    Si le type de variable est par valeur, chaque variable ayant sa valeur, B n'est pas modifié.

    Si le type de variable est par référence, chaque variable est definie par sa référence; faire A=B entraine que A et B ont les même reference.

  6. #6
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Si tu ne comprends pas cette phrase je peux bien te proposer un exemple mais je ne suis pas convaincu que cela t'aide davantage :

    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
     
            Dim A = 10
            Dim B = 0
            Dim result = String.Empty
            'On ajoute 10 à la variable B
            result = AddByVal(A, B)
            MsgBox("Résultat retourné par la fonction : " & result & vbNewLine & _
                   "Valeure de A après l'ajout : " & A & vbNewLine & _
                   "Valeure de B après l'ajout : " & B)
     
            '--> On se rends compte qu'après exécution de la fonction le résultat est correcte et que la valeur de la variable B reste 0
     
     
            'On ajoute 10 à la variable B
            result = AddByRef(A, B)
            MsgBox("Résultat retourné par la fonction : " & result & vbNewLine & _
                   "Valeure de A après l'ajout : " & A & vbNewLine & _
                   "Valeure de B après l'ajout : " & B)
     
            '--> On se rends compte qu'après exécution de la fonction le résultat est correcte mais la variable B a été modifiée à l'intérieur de la fonction et elle est maintenant à 10 puisqu'il s'agit ici d'une référence de B       (on pointe vers l'adresse mémoire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Private Shared Function AddByRef(ByVal A%, ByRef B%) As String
            ' Cela impacte la référence de B qui se situe à l'extérieur de cette fonction !
            B += A
            Return B.ToString
        End Function
        Private Shared Function AddByVal(ByVal A%, ByVal B%) As String
            B += A
            Return B.ToString
        End Function
    J'ai repris l'exemple avec les variables A et B....

    J'espère que ça sera plus clair.

    A+

  7. #7
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut
    Merci d'avoir pris le temps de me faire un petit code. Je vais essayer d’analyser tout sa.

  8. #8
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par mickael62800 Voir le message
    Merci d'avoir pris le temps de me faire un petit code. Je vais essayer d’analyser tout sa.
    Pas de quoi.

    PS : c'est qui qui mets des pouces rouges...o_O

  9. #9
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut
    oops vraiment désolé. je vais essayé de reparer mon erreur.

    Comment enlever se pouce rouge?

    je vais essayer de voir avec un admin pour le supprimer

  10. #10
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par mickael62800 Voir le message
    oops vraiment désolé. je vais essayé de reparer mon erreur.

    Comment enlever se pouce rouge?

    je vais essayer de voir avec un admin pour le supprimer
    Arff visiblement ce n'est pas toi puisque tu as mis un pouce vert..... merci à celui qui fait ça... o_O

  11. #11
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut
    je pensais vraiment que c'etait moi, j'allais même envoyé un mail pour corriger le tir, c'est normal , tu prends 5 min a m'expliquer...

    Vraiment dommage de mettre un pouce rouge a des gens qui essayent d'aider les autres ... M'enfin

  12. #12
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    PS : c'est qui qui mets des pouces rouges...o_O
    Probablement quelqu'un qui pense que les réponses sont hors-sujet ; après perso ça mérite pas forcément un "moinssage" les informations restent utiles et pertinentes

    Pour en revenir au sujet tel qu'exprimé par la citation du cours faite par l'OP ; il ne s'agit pas ici de la différence entre un passage de paramètre par valeur ou par référence ; mais bien de la différence entre type valeur et un type référence.

    Lorsqu'on assigne à une autre variable (lorsqu'on fait B = A) on assigne la valeur de la variable
    Normalement, dans le cas où cette variable a pour type un type valeur, la valeur de cette variable c'est "l'objet entier" ; autrement dit en assignant, on "duplique" l'objet et c'est ce "clone" qui est donné à l'autre variable (et par conséquent une modification sur l'original ne modifie pas le clone)
    Normalement, dans le cas où cette variable a pour type un type référence, la valeur de cette variable c'est une référence vers l'objet (on peut voir ça comme un titre de propriété, on ne range pas sa maison dans sa poche mais le titre de propriété qui se réfère à la maison [faire une métaphore pourrie : Check ! ]) ; et en assignant on duplique la référence (on fait une photocopie du titre de propriété) ce qui donne une nouvelle référence vers le même objet (et par conséquent une modification sur l'objet modifie l'objet et tous ceux qui peuvent s'y référer le verront).

    Comme du code vaut mieux qu'une explication (bancale ) :
    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
    Structure TypeValeurSimple
        Public Num As Integer
    End Structure
     
    Class TypeReferenceSimple
        Public Num As Integer
    End Class
     
    Sub Main()
        TestReference()
        TestValeur()
    End Sub
     
    Sub TestReference()
        Console.WriteLine("Types Référence")
        Dim A As New TypeReferenceSimple
     
        ' on assigne A à B
        Dim B = A
     
        ' on modifie A
        A.Num = 10
     
        ' on constate que la modification se répercute
        Console.WriteLine("A.Num = {0} ; B.Num = {1}", A.Num, B.Num)
        Console.WriteLine()
    End Sub
     
    Sub TestValeur()
        Console.WriteLine("Types Valeur")
        Dim A As New SimpleValueType
     
        ' on assigne A à B
        Dim B = A
     
        ' on modifie A
        A.Num = 10
     
        Console.WriteLine("A.Num = {0} ; B.Num = {1}", A.Num, B.Num)
        Console.WriteLine()
    End Sub
    Attention il existe des exceptions à cette règle dans le Framework ; la plue connue étant String qui est un type référence mais se comporte comme un type valeur.
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  13. #13
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    @Sehn : effectivement je n'avais pas compris la question sous cet angle ...o_O ....

    Probablement quelqu'un qui pense que les réponses sont hors-sujet ; après perso ça mérite pas forcément un "moinssage" les informations restent utiles et pertinentes
    Alors cette personne aurait certainement été plus utile en proposant son explication comme tu le fais si bien car tes explications ne me semblent pas bancale, bien au contraire.

  14. #14
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut
    Merci j'ai compris

  15. #15
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Alors cette personne aurait certainement été plus utile en proposant son explication comme tu le fais si bien car tes explications ne me semblent pas bancale, bien au contraire.
    En fait c'est Sehnsucht mais il n'ose pas le dire ^^.

    Citation Envoyé par Sehnsucht Voir le message
    Attention il existe des exceptions à cette règle dans le Framework ; la plue connue étant String qui est un type référence mais se comporte comme un type valeur.
    Pourquoi cette exception ? Y a un but précis derrière ? Une contrainte technique ? Je ne suis moi-même au fait de cette différence entre type et référence que depuis quelques mois et j'ignorais cette exception. C'est toujours bon à savoir !
    Kropernic

  16. #16
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Pourquoi cette exception ? Y a un but précis derrière ? Une contrainte technique ? Je ne suis moi-même au fait de cette différence entre type et référence que depuis quelques mois et j'ignorais cette exception. C'est toujours bon à savoir !
    Ça ne pouvait en aucun cas être un type valeur, qui ont besoin d'avoir une taille (du type) connue à l'avance pour être stockés, comme pour string elle dépend de son contenu ça ne pouvait pas fonctionner ; a contrario avec un type référence, la taille d'une référence c'est une valeur connue (la même pour tous les types références)
    Après le comportement est celui attendu par un type valeur parce que la classe est immuable ; l'instance ne change pas une fois créée (sauf à l'intérieur de StringBuilder qui utilise des méthodes unsafe pour manipuler directement son string interne) ; mais il y a plein d'autres type références immuables (les instances de type delegate par exemple).
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

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

Discussions similaires

  1. [Débutant] problème de compréhension
    Par Sylvester dans le forum Général Java
    Réponses: 18
    Dernier message: 21/07/2005, 09h16
  2. Réponses: 5
    Dernier message: 11/04/2005, 10h21
  3. [C#] Problème de compréhension de System.Convert ET Provider
    Par papouAlain dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/11/2004, 21h52
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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