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.
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 une telle modification, vous pouvez remplacer le ByRef
mécanisme de passage dans l’appel de procédure en plaçant le nom de l’argument entre parenthèses. Ces parenthèses sont en plus des parenthèses englobant la liste d’arguments dans l’appel.
Le code appelant ne peut pas remplacer un mécanisme ByVal .
Pour forcer le passage par valeur d’un argument
Si le paramètre correspondant est déclaré
ByVal
dans la procédure, vous n’avez pas besoin d’effectuer de mesures 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 ByRef
déclaration de paramètre. 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 de remplacer si elle est passée ByVal ». Lorsqu’elle str
n’est pas placée entre parenthèses supplémentaires, la procédure peut la 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 ByRef
mot clé 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 robuste
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 potentiel pour permettre à une procédure 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 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
- Guide pratique pour protéger un argument de procédure contre les modifications de valeur
- Passage d’arguments par position et par nom
- Types de valeurs et types de références