Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Si une procédure déclare un paramètre en tant que ByRef, Visual Basic donne au code de procédure une référence directe à l’élément de programmation sous-jacent à l’argument dans le code appelant. Cela permet à la procédure de modifier la valeur sous-jacente de l’argument dans le code appelant. Dans certains cas, le code appelant peut vouloir se protéger contre une telle modification.
Vous pouvez toujours protéger un argument contre la modification en déclarant le paramètre ByVal correspondant dans la procédure. Si vous souhaitez pouvoir modifier un argument donné dans certains cas, mais pas d’autres, vous pouvez le déclarer ByRef
et laisser le code appelant déterminer le mécanisme de passage dans chaque appel. Pour ce faire, placez l’argument correspondant entre parenthèses pour le passer par valeur, ou ne l’mettez pas entre parenthèses pour le transmettre par référence. Pour plus d’informations, consultez How to : Force an Argument to Be Passed by Value.
Exemple :
L’exemple suivant montre deux procédures qui prennent une variable de tableau et fonctionnent sur ses éléments. La increase
procédure en ajoute simplement une à chaque élément. La replace
procédure affecte un nouveau tableau au paramètre a()
, puis en ajoute un à chaque élément. Toutefois, la réaffectation n’affecte pas la variable de tableau sous-jacente dans le code appelant.
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Public Sub replace(ByVal a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Le premier appel MsgBox
affiche « After increase(n): 11, 21, 31, 41 ». Étant donné que le tableau n
est un type référence, increase
peut modifier ses membres, même si le mécanisme de passage est ByVal
.
Le deuxième MsgBox
appel affiche « After replace(n) : 11, 21, 31, 41 ». Comme n
il est passé ByVal
, replace
ne peut pas modifier la variable n
dans le code appelant en lui affectant un nouveau tableau. Lorsque vous replace
créez la nouvelle instance k
de tableau et l’attribue à la variable a
locale, elle perd la référence à n
passer par le code appelant. Lorsqu’il modifie les membres, a
seul le tableau k
local est affecté. Par conséquent, replace
n’incrémente pas les valeurs du tableau n
dans le code appelant.
Compiler le code
La valeur par défaut dans Visual Basic consiste à passer des arguments par valeur. Toutefois, il est recommandé d’inclure le mot clé ByVal ou ByRef avec chaque paramètre déclaré. Cela facilite la lecture de votre code.
Voir aussi
- Procédures
- Paramètres et arguments d’une procédure
- Procédure : passer des arguments à une procédure
- Passage d’arguments par valeur et par référence
- Différences entre les arguments modifiables et non modifiables
- Différences entre le passage d’un argument par valeur et par référence
- Procédure : modifier la valeur d’un argument de procédure
- Procédure : forcer un argument à passer par valeur
- Passage d’arguments par position et par nom
- Types de valeurs et types de références