Share via


Différences entre le passage d'un argument par valeur et par référence

Mise à jour : novembre 2007

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. Ce concept porte le nom de mécanisme de passage.

Passage 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 la 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 la procédure n'a pas accès à l'élément sous-jacent dans le code appelant.

Passage par référence

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

Mécanisme de passage et type d'élément

Le choix de mécanisme de passage est différent de 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 la procédure. Un type valeur ou un type référence fait référence à la manière dont un élément de programmation est stocké dans la mémoire.

Toutefois, le mécanisme de passage et le type d'élément sont étroitement 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 référence par valeur, le code de la procédure a un pointeur vers les données de l'élément sous-jacent, bien qu'il ne puisse pas accéder à l'élément sous-jacent lui-même. Par exemple, si l'élément est une variable 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.

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

Type d'élément

Passé ByVal

Passé ByRef

Type valeur (ne contient qu'une valeur)

La procédure ne peut pas modifier la variable ni l'un de ses membres.

La procédure peut modifier la variable et ses membres.

Type référence (contient un pointeur vers une instance de classe ou de structure)

La procédure ne peut pas changer la variable, mais peut modifier les membres de l'instance qu'elle désigne.

La procédure peut changer la variable et les membres de l'instance qu'elle désigne.

Voir aussi

Tâches

Comment : passer des arguments à une procédure

Comment : modifier la valeur d'un argument de la procédure

Comment : protéger un argument de procédure contre les modifications de valeur

Comment : forcer le passage d'un argument par valeur

Concepts

Procédures dans Visual Basic

Paramètres et arguments d'une procédure

Passage d'arguments par valeur et par référence

Différences entre les arguments modifiables et non modifiables

Passage des arguments par position et par nom

Types valeur et types référence