Visual Basic .NET Language
ByVal och ByRef nyckelord
Sök…
ByVal nyckelord
ByVal-nyckelord före metodparameter (eller inget nyckelord som ByVal antas som standard) säger att parameter kommer att skickas på ett sätt som inte tillåter metoden att ändra (tilldela ett nytt värde) den variabel som ligger bakom parametern.
Det hindrar inte innehållet (eller statusen) för argumentet om det är en klass.
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 nyckelord
ByRef-nyckelordet före metodparametern säger att parametern skickas på ett sätt som gör det möjligt för metoden att ändra (tilldela ett nytt värde) den variabel som ligger bakom parametern.
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow