Visual Basic .NET Language
Palabras clave ByVal y ByRef
Buscar..
Palabra clave byVal
La palabra clave ByVal antes del parámetro del método (o ninguna palabra clave como ByVal se supone de forma predeterminada) dice que el parámetro se enviará de una manera que no permita que el método cambie (asigne un nuevo valor) la variable subyacente al parámetro.
No impide que se modifique el contenido (o el estado) del argumento si se trata de una clase.
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 palabra clave
La palabra clave ByRef antes del parámetro del método dice que el parámetro se enviará de manera que permita al método cambiar (asignar un nuevo valor) la variable subyacente al parámetro.
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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow