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. Isso é conhecido como o mecanismo para passar argumentos.

passagem por valor

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

Mecanismo para passar argumentos e tipo de elemento

A opção de mecanismo para passar argumentos não é a mesma da classificação do tipo de elemento subjacente. Passar por valor ou por referência refere-se àquilo que o Visual Basic fornece ao 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 sã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 de 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 Passado ByVal Passado ByRef
Tipo de valor (contém apenas um valor) O procedimento não pode alterar a variável ou qualquer um de 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 membros da instância para a qual ela aponta.

Confira também