Variable de type String

cs_Red_Dragon Messages postés 41 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 27 septembre 2006 - 14 juin 2006 à 15:25
cs_chimi Messages postés 20 Date d'inscription mardi 4 avril 2006 Statut Membre Dernière intervention 21 avril 2008 - 14 juin 2006 à 18:53
En tout premier, je demande indulgence auprès des programmeurs expérimentés car j'ai une question qui les fera certainement sourire. En second, je remercie ces mêmes programmeurs pour l'aide qu'ils apporteront à un débutant.

Si j'ai bien tout compris, les variables sont réparties en deux catégories : les variables de type 'par valeur' et les variables de type 'par référence'. La différence de fonctionnement entre les deux me parait claire. Par contre (si j'ai toujours bien compris), la variable de type String se classe dans la catégorie des variable de type 'par référence' (peut se vérifier facilement avec la fonction IsReference) mais fonctionne comme une variable de type 'par valeur'.

Quelqu'un peut il m'expliquer ce cas particulier ?
Y a t il une subtilité sur les variables String ?
Faut il simplement considérer que c'est comme cela et qu'il n'y a pas de question à se poser ?

D'avance merci pour votre compréhension.  

4 réponses

nborges Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 2 novembre 2007
14 juin 2006 à 15:40
Salut,

le type des variable ne veulent pas dire qú´un type est reference ou pas..

tu peux utilizer la string par valeur ou par reference,

la diference est que qd tu passe par valeur une variable, si tu la change dans la fonction ou dans la sub, cela ne sera valable qd dans la même function, par contre si tu la passe par reference, tous les changement efectué dans la function serão visible après.

exemple:

private sub exemple()
   dim X as string

   x=""
   teste(X)
'aprés teste, X=""
   teste1(X)
'aprés teste1, X= teste1
end sub

public sub teste(byval x as string)
   x= teste
end sub

public sub teste1(byref x as string)
   x= teste1
end sub
cela functione de la meme amniere avec d´autre type..

j´espère avoir repondu a ta kestion

[8D]
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 juin 2006 à 15:46
la Classe String est, par nature (classe...) une variable de type réference.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_Red_Dragon Messages postés 41 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 27 septembre 2006
14 juin 2006 à 17:36
>nborges : merci de ta réponse, mais elle ne correspond pas exactement à la question que je me posais. Je me suis mal exprimé. Je vais préciser si tu veux bien.


J'ai bien compris la différence entre un "ByVal" et un "ByRef" dans un appel de procédure ou fonction.
Mais comme l'a dit Renfield (merci à lui) la classe String est bien de type référence. Je reviens donc à ma question avec un exemple pour etre plus précis.

Avec des variables de type 'valeur' les variables sont distinctes, c'est à dire :


Dim A,B as Integer
A=1
B=A
A=2

dans ce cas le fait de modifier A ne modifie pas B (A=2 et B=1)

tandis-que pour des variables de type 'référence', on ne travaille plus sur les valeurs mais sur l'adressage (il me semble) donc par exemple avec des tableaux :
Dim A(2)
Dim B(2)

si j'affecte des valeurs différentes dans les deux tableaux
A(0)=1 : A(1)=2 : B(0)=3 : B(1)=4
si ensuite je fais
B=A
et que je change les valeurs du tableau A
A(0)=5 : A(1)=6
les valeurs du tableau B s'en trouvent également modifiées (on pointe sur les mêmes adresses je pense)

Et donc j'en viens à ma question sur la variable String, elle est de type 'référence' mais se comporte comme un type 'valeur', car si je fais
Dim A,B as String
A="un"
B=A
A="deux"
cela ne modifie pas B.

En conclusion : String est de type 'référence' et se comporte comme un type 'valeur'
Je voulais donc savoir si il y avait une explication à cela ? une raison que cela soit ainsi ?


nborges, même si ta réponse ne correspond pas tout à fait à ce que j'attendais, je te remercie du temps consacré, et peut etre pourras tu me donner plus de précision, merci à toi
Peut etre que je me pose une question inutile en fait... mais je cherche à comprendre


 


 
0
cs_chimi Messages postés 20 Date d'inscription mardi 4 avril 2006 Statut Membre Dernière intervention 21 avril 2008
14 juin 2006 à 18:53
en fait on appelle ce procede appel des valeurs
tu peus appeller par valeur ou reference
par valeur on te renvois la valeur de variable x intact
mais par adresse tu peux la modifier je vais te passer quelques exemple en pascal la semaine prochaine
0
Rejoignez-nous