Partilhar 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 subjacente no código de chamada. Você pode passar o valor desse elemento subjacente ou uma referência a ele. Isto é conhecido como o mecanismo de passagem.

Passando por Valor

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

Passando por Referência

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

Mecanismo de passagem e tipo de elemento

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

No entanto, o mecanismo de passagem e o tipo de elemento estão inter-relacionados. O valor de um tipo de referência é um ponteiro para os dados em outro lugar na 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 subjacente, mesmo que ele não possa acessar o próprio elemento subjacente. Por exemplo, se o elemento for uma variável de matriz, o código de procedimento não terá acesso à variável em si, mas poderá acessar os membros da matriz.

Capacidade de modificar

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

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

Tipo de elemento Aprovado ByVal Aprovado ByRef
Tipo de valor (contém apenas um valor) O procedimento não pode alterar a variável ou qualquer um dos seus membros. O procedimento pode alterar a variável e seus membros.
Tipo de referência (contém um ponteiro para uma instância de classe ou estrutura) O procedimento não pode alterar a variável, mas pode alterar membros da instância para a qual ela aponta. O procedimento pode alterar a variável e os membros da instância para a qual aponta.

Consulte também