ByVal (Visual Basic)

Especifica que se pasa un argumento por valor ,de modo que el procedimiento o la propiedad a los que se llama no puedan cambiar el valor de una variable subyacente al argumento en el código de llamada. Si no se especifica ningún modificador, ByVal es el valor predeterminado.

Nota

Dado que es el valor predeterminado, no es necesario especificar explícitamente la palabra ByVal clave en las firmas de método. Tiende a generar código ruidoso y, a menudo, hace que la palabra clave no predeterminada se ByRef pase por alto.

Comentarios

El modificador ByVal se puede utilizar en los contextos siguientes:

Declare Statement

Instrucción Function

Operator Statement

Property Statement

Instrucción Sub

Ejemplo

En el ejemplo siguiente se muestra el uso del mecanismo de ByVal paso de parámetros con un argumento de tipo de referencia. En el ejemplo, el argumento es c1 , una instancia de la clase Class1 . ByVal impide que el código de los procedimientos cambie el valor subyacente del argumento de referencia, , pero no protege los campos y propiedades accesibles c1 de c1 .

Module Module1

    Sub Main()

        ' Declare an instance of the class and assign a value to its field.
        Dim c1 As New Class1()
        c1.Field = 5
        Console.WriteLine(c1.Field)
        ' Output: 5

        ' ByVal does not prevent changing the value of a field or property.
        ChangeFieldValue(c1)
        Console.WriteLine(c1.Field)
        ' Output: 500

        ' ByVal does prevent changing the value of c1 itself. 
        ChangeClassReference(c1)
        Console.WriteLine(c1.Field)
        ' Output: 500

        Console.ReadKey()
    End Sub

    Public Sub ChangeFieldValue(ByVal cls As Class1)
        cls.Field = 500
    End Sub

    Public Sub ChangeClassReference(ByVal cls As Class1)
        cls = New Class1()
        cls.Field = 1000
    End Sub

    Public Class Class1
        Public Field As Integer
    End Class

End Module

Consulta también