Visual Basic .NET Language
Ключевые слова ByVal и ByRef
Поиск…
Ключевое слово ByVal
Параметр ByVal перед параметром метода (или по умолчанию не используется ключевое слово как ByVal) говорит, что этот параметр будет отправлен таким образом, чтобы не изменять метод (присваивать новое значение) переменной, лежащей в основе этого параметра.
Это не препятствует изменению содержимого (или состояния) аргумента, если это класс.
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
Параметр ByRef перед параметром метода указывает, что параметр будет отправлен таким образом, чтобы метод мог изменить (присвоить новое значение) переменную, лежащую в основе параметра.
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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow