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
- Procedimentos
- Parâmetros e Argumentos de Procedimento
- Como passar argumentos para um procedimento
- Passar argumentos por valor e por referência
- Diferenças entre argumentos modificáveis e não modificáveis
- 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 a ser passado por Valor
- Passando argumentos por posição e nome
- Tipos de Valor e Tipos de Referência