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