Partilhar via


Não é possível copiar o valor do parâmetro 'ByRef' '<parametername>' para o argumento correspondente por que o tipo '<typename1>' não pode ser convertido para o tipo '<typename2>'

Um procedimento é declarado com um tipo de parâmetro que não pode ser convertido para o tipo do argumento chamado.

Quando você define uma classe ou estrutura, você pode definri um ou mais operadores de conversão para converter aquela tipo classe ou estrutura para outros tipos.Você também pode definir operadores de conversão reversa para converter aqueles outros tipos de volta para seu tipo de classe ou estrutura.Quando você usa sua classe ou tipo de estrutura numa chamada de procedimento, Visual Basic pode usar esses operadores de conversão para converter o tipo de um argumento para o tipo de seu parâmetro correspondente.

Se você passar o argumento ByRef, Visual Basic algumas vezes copia o valor do argumento para um variável local no procedimento em vez de passar uma referência.Nesse caso, quando o procedimento retona, Visual Basic deve copiar o valor da variável local de volta para o argumento no código que chamou.

Se um valor de argumento ByRef é copiado no procedimento e o argumento e parâmetro são do mesmo tipo, não é necessária nenhuma conversão.Mas se os tipos são diferentes, Visual Basic deve converter em ambas as direções.Se um dos tipos é sua classe ou tipo de estrutura, Visual Basic deve convertê-lo tanto de quanto para o outro tipo.Isso significa que você deve definir operadores de conversão em ambas as direções.

ID de erro: BC33037

Para corrigir este erro

  • Se possível, use um argumento chamando do mesmo tipo que o parâmetro do procedimento, dessa forma o Visual Basic não precisa fazer nenhuma conversão.

  • Se você precisar chamar o procedimento com um tipo de argumento diferente do tipo de parâmetro mas não precisa de retornar um valor no argumento chamante, defina o parâmetro para ser ByVal em vez de ByRef.

  • Se você precisa retornar um valor no argumento chamante, defina o operadort de coversão reversa de forma que Visual Basic possa converter de volta para o tipo do argumento chamante.

Consulte também

Tarefas

Como: Definir um operador

Como: Define a Conversion operador

Conceitos

Procedimentos no Visual Basic

Parâmetros do procedimento e argumentos

Argumento Passing By valor e por referência

Procedimentos de Operador

Referência

Declaração Operator