Compartilhar via


ByVal (Visual Basic)

Especifica que um argumento é passado por valor, para que o procedimento ou propriedade chamado não possa alterar o valor de uma variável subjacente ao argumento no código de chamada. Se nenhum modificador for especificado, ByVal será o padrão.

Observação

Como ele é o padrão, você não precisa especificar explicitamente a ByVal palavra-chave nas assinaturas do método. Ele tende a produzir código barulhento e, muitas vezes, leva a palavra-chave não padrão ByRef a ser ignorada.

Observações

O ByVal modificador pode ser usado nestes contextos:

Instrução Declare

Declaração de Função

Instrução Operator

Declaração de Propriedade

Instrução Sub

Exemplo

O exemplo a seguir demonstra o uso do mecanismo de passagem de ByVal parâmetro com um argumento de tipo de referência. No exemplo, o argumento é c1, uma instância da classe Class1. ByVal impede que o código nos procedimentos altere o valor subjacente do argumento de referência, c1mas não protege os campos e as propriedades acessíveis 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

Consulte também