Share via


Comment : forcer le passage d'un argument par valeur

Mise à jour : novembre 2007

La déclaration de procédure détermine le mécanisme de passage. Si un paramètre est déclaré ByRef, Visual Basic doit passer l'argument correspondant par référence. Cela permet à la procédure de modifier la valeur de l'élément de programmation sous-jacent à l'argument dans le code appelant. Si vous souhaitez protéger l'élément sous-jacent contre une telle modification, vous pouvez substituer le mécanisme de passage ByRef dans l'appel de procédure en plaçant le nom de l'argument entre parenthèses. Ces parenthèses s'ajoutent aux parenthèses qui encadrent la liste d'arguments dans l'appel.

Le code appelant ne peut pas substituer un mécanisme ByVal.

Pour forcer le passage d'un argument par valeur

  • Si le paramètre correspondant est déclaré ByVal dans la procédure, aucune étape supplémentaire n'est requise. Visual Basic doit déjà passer l'argument par valeur.

  • Si le paramètre correspondant est déclaré ByRef dans la procédure, placez l'argument entre parenthèses dans l'appel de procédure.

Exemple

L'exemple suivant substitue une déclaration de paramètre ByRef. Dans l'appel qui force ByVal, notez les deux niveaux de parenthèses.

Sub setNewString(ByRef inString As String)
    inString = "This is a new value for the inString argument."
    MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"

' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)

' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)

Lorsque str est placé entre des parenthèses supplémentaires dans la liste d'arguments, la procédure setNewString ne peut pas modifier sa valeur dans le code appelant, et MsgBox affiche "Cannot be replaced if passed ByVal". Lorsque str n'est pas placé entre des parenthèses supplémentaires, la procédure peut le modifier, et MsgBox affiche "This is a new value for the inString argument".

Compilation du code

Lorsque vous passez une variable par référence, vous devez utiliser le mot clé ByRef pour spécifier ce mécanisme.

Le comportement par défaut en Visual Basic consiste à passer les arguments par valeur. En programmation, il est toutefois conseillé d'ajouter le mot clé ByVal ou ByRef avec chaque argument déclaré. Cela rend votre code plus lisible.

Programmation fiable

Si une procédure déclare un paramètre ByRef, l'exécution correcte du code peut dépendre de la capacité à modifier l'élément sous-jacent dans le code appelant. Si le code appelant substitue ce mécanisme appelant en plaçant l'argument entre parenthèses ou s'il passe un argument non modifiable, la procédure ne peut pas modifier l'élément sous-jacent. Cela peut produire des résultats inattendus dans le code appelant.

Sécurité

Permettre à une procédure de modifier la valeur sous-jacente à un argument dans le code appelant est toujours risqué. Vérifiez que cette valeur doit bien être modifiée et préparez-vous à en vérifier la validité avant de l'utiliser.

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

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

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

Passage des arguments par position et par nom

Types valeur et types référence