Como: proteger contra alterações de valor (Visual Basic), um argumento de procedimento
Se um procedimento declara um parâmetro como ByRef (Visual Basic), Visual Basic fornece uma referência direta ao elemento de programação subjacente do argumento no código de chamada do código do procedimento.Isso permite que o procedimento para alterar o valor subjacente do argumento no código de chamada.Em alguns casos, o código de chamada talvez queira proteger contra tal alteração.
Você sempre pode proteger um argumento de alteração, declarando o parâmetro correspondente ByVal (Visual Basic) no procedimento.Se você quiser ser capaz de alterar um determinado argumento em alguns casos, mas não outros, você pode declará-lo ByRef e deixe o código de chamada para determinar o mecanismo de passagem em cada chamada.Ele faz isso colocando o argumento correspondente entre parênteses devem passar por valor ou não envolve em parênteses devem passar por referência.Para mais informações, consulte Como: forçar um argumento para ser passados por valor (Visual Basic).
Exemplo
O exemplo a seguir mostra dois procedimentos que tenham uma variável de matriz e operam em seus elementos.O procedimento increase simplesmente adiciona um para cada elemento.O procedimento replace atribui o parâmetro a() uma nova matriz e, em seguida, adiciona um para cada elemento.No entanto, a reatribuição não afeta a variável de matriz subjacente no código de chamada.
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Public Sub replace(ByVal a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Exibe o primeiro MsgBox chamada " após increase(n): 11 21, 31, 41".Porque a matriz n é um tipo de referência, replace pode alterar seus membros, mesmo que ByVal seja a mecanismo de passagem.
A segunda MsgBox chamada exibe " Após Replace(n): 11, 21, 31, 41.Porque n é passado ByVal, replace não é possível modificar a variável n no código de chamada, atribuindo-lhe uma nova matriz.Quando replace cria a nova instância de matriz k e a atribui à variável local a, ele perde a referência a n passado pelo código de chamada.Quando ele se transformar os membros do a, apenas o array local k é afetado.Portanto, replace não incrementa os valores da matriz n no código de chamada.
Compilando o código
O padrão no Visual Basic é passar argumentos por valor.No entanto, é boa prática de programação incluir a palavra-chave ByVal (Visual Basic) ou ByRef (Visual Basic) com cada parâmetro declarado.Isso facilita a leitura seu código.
Consulte também
Tarefas
Como: passar argumentos para um procedimento (Visual Basic)
Como: alterar o valor de um argumento de procedimento (Visual Basic)
Como: forçar um argumento para ser passados por valor (Visual Basic)
Conceitos
Parâmetros de procedimentos e argumentos (Visual Basic)
Passando argumentos por valor e por referência (Visual Basic)
Diferenças entre os argumentos podem ser modificadas e Nonmodifiable (Visual Basic)
Diferenças entre passar um argumento pelo valor e por referência (Visual Basic)