Diferenças entre passar um argumento por valor e por referência

Quando você passa um ou mais argumentos para um procedimento, cada argumento corresponde a um elemento de programação oculto no código de chamada.Você passar tanto o valor desse elemento como uma referência a ele.Isso é conhecido como Mecanismo de passagem.

Passagem por valor

Você passa um argumento por favor especificando a palavra-chave ByVal para o parâmetro correspondente na definição do procedimento.Quando você usa este mecanismo de passagem, o Visual Basic copia o valor do elemento de programação oculto numa variável local do procedimento.O çodigo do procedimento não tem nenhum acesso ao elemento no código de chamada.

Passagem por referência

Você passa um argumento por referência especificando a palavra-chave ByRef para o parâmetro correspondente na definição do procedimento.Quando você usa esse mecanismo de passagem, o Visual Basic dá ao procedimento uma referência direta ao elemento oculto no código de chamada.

Mecanismo de passagem e Tipo do Elemento

A escolha do mecanismo de passagem não é a mesma dependendo do tipo do elemento.Passagem por valor ou referência se refere ao que o Visual Basic fornece ao código do procedimento.Um tipo de valor ou tipo de referência se refere a como o elemento de programação é armazenado na memória.

Entretanto, o mecanismo de passagem e tipo de elemento se relacionam.O valor de um tipo de referência é um ponteiro para os dados em algum lugar da memória.Isso significa que quando você passa um tipo de referência por valor, o código do procedimento tem um ponteiro para os dados do elemento, mesmo que ele não possa acessar o elemento em si.Por exemplo, se o elemento é uma variável array, o código do procedimento não tem acesso à variável em si, mas ele pode acessar os membros do array.

Capacidade de Modificar

Quando você passa um elemento não modificável como argumento, o procedimento nunca pode modificá-lo no código de chamada, se é passado ByVal ou ByRef.

Para um elemento modificável, a seguinte tabela resume a interação entre o tipo de elemento e o mecanismo de passagem.

Tipo de elemento

Passado ByVal

Passado ByRef

Tipo de valor (contém apenas um valor)

O procedimento não pode mudar a variável ou qualquer um dos seus membros.

O procedimento pode mudar a variável e seus membros.

Tipo de referência (contém um ponteiro para a instância de classe ou estrutura).

O procedimento não pode mudar a variável mas pode mudar membros da instância para qual ele aponta.

O procedimento pode mudar a variável e mudar membros da instância para qual ele aponta.

Consulte também

Tarefas

Como: Passar argumentos para um procedimento

Como: Alterar o valor de um argumento de procedimento

Como: Proteger um argumento de procedimento contra alterações de valor

Como: Forçar um argumento para ser passada por valor

Conceitos

Procedimentos no Visual Basic

Parâmetros do procedimento e argumentos

Argumento Passing By valor e por referência

Diferenças entre argumentos Modificáveis e Não Modificáveis

Passagem de Argumentos por Posição e Nome

Tipos de valores e tipos de referências