Comment : forcer le passage d’un argument par valeur (Visual Basic)
La déclaration de procédure détermine le mécanisme de passage. Si un paramètre est déclaré ByRef, Visual Basic s’attend à 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 de telles modifications, vous pouvez remplacer 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 entourent la liste d’arguments dans l’appel.
Le code appelant ne peut pas remplacer 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, vous n’avez pas besoin d’effectuer des étapes supplémentaires. Visual Basic s’attend 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 remplace 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 « Impossible d’être remplacée si ByVal est passé ». Lorsque str
n’est pas placé entre des parenthèses supplémentaires, la procédure peut le modifier et MsgBox
affiche « Il s’agit d’une nouvelle valeur pour l’argument inString ».
Compiler le code
Lorsque vous passez une variable par référence, vous devez utiliser le mot clé ByRef
pour spécifier ce mécanisme.
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.
Programmation fiable
Si une procédure déclare un paramètre ByRef, l’exécution correcte du code peut dépendre de la possibilité de modifier l’élément sous-jacent dans le code appelant. Si le code appelant remplace ce mécanisme d’appel en plaçant l’argument entre parenthèses, ou s’il transmet 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é du .NET Framework
Il existe toujours un risque lors de l’attribution à une procédure d’une permission de modifier la valeur sous-jacente d’un argument dans le code appelant. Veillez à ce que cette valeur soit modifiée et préparez-vous à vérifier sa validité avant de l’utiliser.
Voir aussi
- Procédures
- Paramètres et arguments d’une procédure
- Comment : passer des arguments à une procédure
- Passage des 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
- Comment : modifier la valeur d’un argument de la procédure
- Comment : protéger un argument de procédure contre les modifications de valeur
- Passage des arguments par position et par nom
- Value Types and Reference Types