Compartilhar via


Como: forçar um argumento para ser passados por valor (Visual Basic)

Declaração do procedimento determina a mecanismo de passagem.Se um parâmetro é declarado ByRef (Visual Basic), Visual Basic espera passar o argumento correspondente por referência.Isso permite que o procedimento altere o valor da elemento de programação subjacente o argumento o código de chamada.Se você desejar proteger o elemento subjacente contra alteração, você pode substituir a ByRef mecanismo de passagem na chamada de procedimento colocando o nome do argumento entre parênteses.Esses parênteses são adicionais aos parênteses envolvendo de lista de argumentos na chamada.

O código de chamada não pode substituir um mecanismo ByVal (Visual Basic).

Como: obrigar um argumento a ser passado por Valor

  • Se o parâmetro correspondente é declarado ByVal no procedimento, você não precisará execute quaisquer etapas adicionais.Visual Basicjá espera passar o argumento por valor.

  • Se o parâmetro correspondente é declarado ByRef no procedimento, coloque o argumento entre parênteses na chamada de procedimento.

Exemplo

O exemplo a seguir substitui uma declaração ByRef de parâmetro.Na chamada que obriga ByVal, observe os dois níveis de parênteses.

Sub setNewString(ByRef inString As String)
    inString = "This is a new value for the inString argument."
    MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"

' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)

' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)

Quando str é colocado entre parênteses extras dentro de lista de argumentos, o procedimento setNewString não pode alterar o valor no código de chamada, e MsgBox exibe "não pode ser substituído se passado ByVal".Quando str não é colocado entre parênteses extras, o procedimento pode alterá-lo, e MsgBox exibe "Este é um novo valor para o argumento inString."

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.

Programação robusta

Se um procedimento declara um parâmetro ByRef (Visual Basic), a execução correta do código pode depender de poder alterar o elemento subjacente no código de chamada.Se o código de chamada substitui esse mecanismo de chamada colocando o argumento entre parênteses, ou se ele passar um argumento não-modificável, o procedimento não pode alterar o elemento subjacente.Isso pode produzir resultados inesperados no código de chamada.

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: alterar o valor de um argumento de procedimento (Visual Basic)

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

Conceitos

Procedimentos no Visual Basic

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)

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

Tipos de valor e referência