Compartilhar via


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

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 (Visual Basic) 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 (Visual Basic) 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 (Visual Basic)

Como alterar o valor de um argumento de 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)

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

Tipos de valor e referência