Différences entre le passage d’un argument par valeur et par référence (Visual Basic)

Lorsque vous passez un ou plusieurs arguments à une procédure, chaque argument correspond à un élément de programmation sous-jacent dans le code appelant. Vous pouvez passer la valeur de cet élément sous-jacent ou une référence à celui-ci. C’est ce qu’on appelle le mécanisme de passage.

passer par valeur

Vous passez un argument par valeur en spécifiant le mot clé ByVal pour le paramètre correspondant dans la définition de procédure. Lorsque vous utilisez ce mécanisme de passage, Visual Basic copie la valeur de l’élément de programmation sous-jacent dans une variable locale dans la procédure. Le code de procédure n’a pas accès à l’élément sous-jacent dans le code appelant.

Passer par référence

Vous transmettez un argument par référence en spécifiant le mot clé ByRef pour le paramètre correspondant dans la définition de procédure. Lorsque vous utilisez ce mécanisme de passage, Visual Basic donne à la procédure une référence directe à l’élément de programmation sous-jacent dans le code appelant.

Passage du mécanisme et du type d’élément

Le choix du mécanisme de passage n’est pas identique à la classification du type d’élément sous-jacent. Le passage par valeur ou par référence fait référence à ce que Visual Basic fournit au code de procédure. Un type de valeur ou de référence fait référence à la manière dont un élément de programmation est stocké en mémoire.

Toutefois, le mécanisme de passage et le type d’élément sont liés. La valeur d’un type référence est un pointeur vers les données situées ailleurs dans la mémoire. Cela signifie que lorsque vous passez un type de référence par valeur, le code de la procédure dispose d'un pointeur sur les données de l'élément sous-jacent, même s'il ne peut pas accéder à l'élément sous-jacent lui-même. Par exemple, si l'élément est une variable de type tableau, le code de la procédure n'a pas accès à la variable elle-même, mais il peut accéder aux membres du tableau.

Possibilité de modifier

Lorsque vous passez un élément non modifiable en tant qu’argument, la procédure ne peut jamais le modifier dans le code appelant, qu’il soit passé ByVal ou ByRef.

Pour un élément modifiable, le tableau suivant résume l'interaction entre le type d'élément et le mécanisme de passage.

Type d'élément RéussiteByVal RéussiteByRef
Type valeur (contient uniquement une valeur) La procédure ne peut pas modifier la variable ou l’un de ses membres. La procédure peut modifier la variable et ses membres.
Type référence (contient un pointeur vers une classe ou une structure instance) La procédure ne peut pas modifier la variable, mais peut modifier les membres du instance vers lequel elle pointe. La procédure peut modifier la variable et les membres de l'instance vers laquelle elle pointe.

Voir aussi