Partager via


Guide pratique pour modifier la valeur d’un argument de procédure (Visual Basic)

Lorsque vous appelez une procédure, chaque argument que vous fournissez correspond à l’un des paramètres définis dans la procédure. Dans certains cas, le code de procédure peut modifier la valeur sous-jacente d’un argument dans le code appelant. Dans d’autres cas, la procédure ne peut modifier que sa copie locale d’un argument.

Lorsque vous appelez la procédure, Visual Basic effectue une copie locale de chaque argument passé par ByVal. Pour chaque argument passé par ByRef, Visual Basic fournit au code de procédure une référence directe à l’élément de programmation sous-jacent à l’argument dans le code appelant.

Si l’élément sous-jacent du code appelant est un élément modifiable et que l’argument est passé ByRef, le code de procédure peut utiliser la référence directe pour modifier la valeur de l’élément dans le code appelant.

Modification de la valeur sous-jacente

Pour modifier la valeur sous-jacente d’un argument de procédure dans le code appelant

  1. Dans la déclaration de procédure, spécifiez ByRef pour le paramètre correspondant à l’argument.

  2. Dans le code appelant, transmettez un élément de programmation modifiable en tant qu’argument.

  3. Dans le code appelant, ne placez pas l’argument entre parenthèses dans la liste d’arguments.

  4. Dans le code de procédure, utilisez le nom du paramètre pour affecter une valeur à l’élément sous-jacent dans le code appelant.

Consultez l’exemple plus bas pour une démonstration.

Modification des copies locales

Si l’élément sous-jacent dans le code appelant est un élément non modifiable ou si l’argument est passé ByVal, la procédure ne peut pas modifier sa valeur dans le code appelant. Toutefois, la procédure peut modifier sa copie locale d’un tel argument.

Pour modifier la copie d’un argument de procédure dans le code de procédure

  1. Dans la déclaration de procédure, spécifiez ByVal pour le paramètre correspondant à l’argument.

    - ou -

    Dans le code appelant, placez l’argument entre parenthèses dans la liste d’arguments. Cela force Visual Basic à passer l’argument par valeur, même si le paramètre correspondant spécifie ByRef.

  2. Dans le code de procédure, utilisez le nom du paramètre pour affecter une valeur à la copie locale de l’argument. La valeur sous-jacente dans le code appelant n’est pas modifiée.

Exemple :

L’exemple suivant montre deux procédures qui prennent une variable de tableau et fonctionnent sur ses éléments. La increase procédure en ajoute simplement une à chaque élément. La replace procédure affecte un nouveau tableau au paramètre a() , puis en ajoute un à chaque élément.

Public Sub increase(ByVal a() As Long)
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Public Sub replace(ByRef a() As Long)
    Dim k() As Long = {100, 200, 300}
    a = k
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

Le premier appel MsgBox affiche « After increase(n): 11, 21, 31, 41 ». Étant donné que le tableau n est un type référence, replace peut modifier ses membres, même si le mécanisme de passage est ByVal.

Le deuxième appel MsgBox affiche « After replace(n) : 101, 201, 301 ». Parce que n est passé ByRef, replace peut modifier la variable n dans le code appelant et lui affecter un nouveau tableau. Puisque n est un type de référence, replace peut également modifier ses membres.

Vous pouvez empêcher la procédure de modifier la variable elle-même dans le code appelant. Découvrez comment : protéger un argument de procédure contre les modifications de valeur.

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.

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