Visual Basic .NET Language
Mots-clés ByVal et ByRef
Recherche…
Mot clé ByVal
Le mot-clé ByVal avant le paramètre method (ou aucun mot-clé tel que ByVal est supposé par défaut) indique que ce paramètre sera envoyé de manière à ne pas permettre à la méthode de modifier (affecter une nouvelle valeur) la variable sous-jacente au paramètre.
Cela n'empêche pas le contenu (ou l'état) de l'argument d'être modifié s'il s'agit d'une classe.
Class SomeClass
Public Property Member As Integer
End Class
Module Program
Sub Main()
Dim someInstance As New SomeClass With {.Member = 42}
Foo (someInstance)
' here someInstance is not Nothing (still the same object)
' but someInstance.Member is -42 (internal state can still be changed)
Dim number As Integer = 42
Foo(number)
' here number is still 42
End Sub
Sub Foo(ByVal arg As SomeClass)
arg.Member = -arg.Member ' change argument content
arg = Nothing ' change (re-assign) argument
End Sub
Sub Foo(arg As Integer) ' No ByVal or ByRef keyword, ByVal is assumed
arg = -arg
End Sub
End Module
Mot-clé ByRef
Le mot-clé ByRef avant le paramètre de méthode indique que ce paramètre sera envoyé de manière à permettre à la méthode de modifier (attribuer une nouvelle valeur) la variable sous-jacente au paramètre.
Class SomeClass
Public Property Member As Integer
End Class
Module Program
Sub Main()
Dim someInstance As New SomeClass With {.Member = 42}
Foo (someInstance)
' here someInstance is not Nothing
' but someInstance.Member is -42
Bar(someInstance)
' here someInstance is Nothing
End Sub
Sub Foo(ByVal arg As SomeClass)
arg.Member = -arg.Member ' change argument content
arg = Nothing ' change (re-assign) argument
End Sub
Sub Bar(ByRef param As Integer)
arg.Member = -arg.Member ' change argument content
arg = Nothing ' change (re-assign) argument
End Sub
End Module
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow