Partager via


Procédure : forcer un argument à passer 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 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