Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
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, c1
mas 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