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
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
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
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+
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.
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)J'ai repris l'exemple avec les variables A et B....
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'espère que ça sera plus clair.
A+
Merci d'avoir pris le temps de me faire un petit code. Je vais essayer d’analyser tout sa.
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
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
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 ) :
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.
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
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.
@Sehn : effectivement je n'avais pas compris la question sous cet angle ...o_O ....
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.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
En fait c'est Sehnsucht mais il n'ose pas le dire ^^.
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
Ç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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager