Byval (Visual Basic)

Spécifie qu’un argument a dépassé par valeur, de sorte que la procédure ou la propriété appelée ne peut pas modifier la valeur d'une variable sous-jacente à l'argument dans le code appelant. Si aucun modificateur n’est spécifié, ByVal est la valeur par défaut.

Notes

Comme il s’agit de la valeur par défaut, vous n’avez pas à spécifier explicitement le mot-clé ByVal dans les signatures de méthode. Cela tend à produire un code bruyant et conduit souvent à négliger le mot-clé ByRef qui n'est pas celui par défaut.

Notes

Le modificateur ByVal peut être utilisé dans les contextes suivants :

Declare Statement

Function (instruction)

Operator Statement

Property Statement

Sub (instruction)

Exemple

L’exemple suivant illustre l’utilisation du mécanisme de passage du paramètre ByVal avec un argument de type référence. Dans l’exemple, l’argument est c1, une instance de classe Class1. ByVal empêche le code des procédures de modifier la valeur sous-jacente de l’argument de référence, c1, mais ne protège pas les champs et propriétés accessibles de c1.

Module Module1

    Sub Main()

        ' Declare an instance of the class and assign a value to its field.
        Dim c1 As New Class1()
        c1.Field = 5
        Console.WriteLine(c1.Field)
        ' Output: 5

        ' ByVal does not prevent changing the value of a field or property.
        ChangeFieldValue(c1)
        Console.WriteLine(c1.Field)
        ' Output: 500

        ' ByVal does prevent changing the value of c1 itself. 
        ChangeClassReference(c1)
        Console.WriteLine(c1.Field)
        ' Output: 500

        Console.ReadKey()
    End Sub

    Public Sub ChangeFieldValue(ByVal cls As Class1)
        cls.Field = 500
    End Sub

    Public Sub ChangeClassReference(ByVal cls As Class1)
        cls = New Class1()
        cls.Field = 1000
    End Sub

    Public Class Class1
        Public Field As Integer
    End Class

End Module

Voir aussi