Compartilhar via


Como alterar o valor de um argumento de procedimento (Visual Basic)

Quando você chamar um procedimento, cada argumento que você fornecer corresponde a um dos parâmetros definidos no procedimento. Em alguns casos, o código do procedimento pode alterar o valor subjacente um argumento no código de chamada. Em outros casos, o procedimento pode alterar apenas sua cópia local de um argumento.

Quando você chamar o procedimento, Visual Basic Faz uma cópia local de cada argumento que é passado ByVal (Visual Basic). Para cada argumento passado ByRef (Visual Basic),Visual Basic fornece o código do procedimento uma referência direta para o elemento de programação subjacente o argumento o código de chamada.

Se o elemento BASE no código de chamada é um elemento modificável e o argumento é passado ByRef,o código do procedimento pode usar a referência direta para alterar valor do elemento no código de chamada.

Alterando o valor Underlying

Para alterar o valor subjacente de um argumento procedimento no código de chamada

  1. Na declaração do procedimento, especifique ByRef (Visual Basic) para o parâmetro correspondente ao argumento.

  2. No código de chamada, passe um elemento de programação modificável como o argumento.

  3. No código de chamada, não coloque o argumento entre parênteses na lista de argumentos.

  4. No código de procedimento, usar o nome do parâmetro para atribuir um valor para o elemento BASE no código de chamada.

Consulte o exemplo mais para baixo para ver uma demonstração.

Alterando cópias locais

Se o elemento BASE no código de chamada é um elemento nonmodifiable, ou se o argumento é passado ByVal,o procedimento não é possível alterar o valor no código de chamada. No entanto, o procedimento pode alterar sua cópia local de um argumento.

Para alterar a cópia de um argumento procedimento no código de procedimento

  1. Na declaração do procedimento, especifique ByVal (Visual Basic) para o parâmetro correspondente ao argumento.

    -  ou  -

    No código de chamada, não coloque o argumento entre parênteses na lista de argumentos. Isso força Visual Basic para passar o argumento por valor, mesmo se o parâmetro correspondente ByRef especifica.

  2. No código de procedimento, usar o nome do parâmetro para atribuir um valor para a cópia local do argumento. O valor subjacente no código de chamada não é alterado.

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.

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(ByRef 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): 101, 201, 301". Como n é passado ByRef, replace pode modificar a variável n no código de chamada e atribuir uma nova matriz para ele. Como n é um tipo de referência, replace também pode alterar seus membros.

Você pode impedir modificando a variável próprio no código de chamada de procedimento. Consulte Como proteger um argumento de procedimento contra alterações de valor (Visual Basic).

Compilando o código

Quando uma variável é passada por referência, você deve usar a palavra-chave ByRef para especificar esse mecanismo.

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.

Segurança

Sempre há um risco potencial em permitir que um procedimento altere o valor subjacente a um argumento no código de chamada. Certifique-se de que você espera que esse valor seja alterado e esteja preparado para verificá-lo para validade antes de usá-lo.

Consulte também

Tarefas

Como passar argumentos para um procedimento (Visual Basic)

Como proteger um argumento de procedimento contra alterações de valor (Visual Basic)

Como forçar um argumento a ser passado por valor (Visual Basic)

Conceitos

Procedimentos no Visual Basic

Parâmetros e argumentos de procedimento (Visual Basic)

Passando argumentos por valor e por referência (Visual Basic)

Diferenças entre argumentos modificáveis e não modificáveis (Visual Basic)

Diferenças entre passar um argumento por valor e por referência (Visual Basic)

Passando argumentos por posição e nome (Visual Basic)

Tipos de valor e referência