Partilhar via


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

A declaração de procedimento determina o mecanismo de passagem. Se um parâmetro for declarado ByRef, o Visual Basic espera passar o argumento correspondente por referência. Isso permite que o procedimento altere o valor do elemento de programação subjacente ao argumento no código de chamada. Se desejar proteger o elemento subjacente contra essa alteração, você pode substituir o 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 que encerram a lista de argumentos na chamada.

O código de chamada não pode substituir um mecanismo ByVal .

Para forçar um argumento a ser passado por valor

  • Se o parâmetro correspondente for declarado ByVal no procedimento, não é necessário executar nenhuma etapa adicional. Visual Basic já espera passar o argumento por valor.

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

Exemplo

O exemplo a seguir substitui uma ByRef declaração de parâmetro. Na chamada que força 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 na lista de argumentos, o setNewString procedimento não pode alterar seu valor no código de chamada e MsgBox exibe "Não pode ser substituído se passado ByVal". Quando str não está entre parênteses extras, o procedimento pode alterá-lo e MsgBox exibe "Este é um novo valor para o argumento inString".

Compilar o código

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

O padrão no Visual Basic é passar argumentos por valor. No entanto, é uma boa prática de programação incluir a palavra-chave ByVal ou ByRef em cada parâmetro declarado. Isso torna seu código mais fácil de ler.

Programação robusta

Se um procedimento declarar um parâmetro ByRef, a execução correta do código pode depender da capacidade de alterar o elemento subjacente no código de chamada. Se o código de chamada substituir esse mecanismo de chamada colocando o argumento entre parênteses ou se passar um argumento não modificável, o procedimento não poderá alterar o elemento subjacente. Isso pode produzir resultados inesperados no código de chamada.

Segurança do .NET Framework

Há sempre um risco potencial em permitir que um procedimento altere o valor subjacente a um argumento no código de chamada. Certifique-se de que espera que este valor seja alterado e esteja preparado para verificar a sua validade antes de o utilizar.

Consulte também