Visual Basic .NET Language
ByVal- en ByRef-zoekwoorden
Zoeken…
ByVal-trefwoord
ByVal-sleutelwoord vóór methode-parameter (of geen sleutelwoord zoals standaard wordt aangenomen dat ByVal wordt verondersteld) zegt dat de parameter zodanig wordt verzonden dat de methode de onderliggende variabele van de parameter niet kan wijzigen (een nieuwe waarde toewijzen).
Het voorkomt niet dat de inhoud (of status) van het argument wordt gewijzigd als het een klasse is.
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
ByRef trefwoord
ByRef-sleutelwoord voor methode-parameter zegt dat de parameter zodanig wordt verzonden dat de methode de onderliggende variabele van de parameter kan wijzigen (een nieuwe waarde kan toewijzen).
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow