La acción de volver a copiar el valor del parámetro 'ByRef' '<nombre de parámetro>' en el argumento coincidente restringe del tipo '<nombre de tipo 1>' al tipo '<nombre de tipo 2>'

Se llama a un procedimiento con un argumento que se amplía al tipo de parámetro correspondiente, y la conversión del parámetro al argumento es de restricción.

Al definir una clase o una estructura, puede definir uno o varios operadores de conversión para convertir ese tipo de clase o estructura a otros tipos. También puede definir a los operadores de conversión inversos para convertir esos otros tipos de vuelta a su clase o tipo de estructura. Cuando utilice su tipo de clase o estructura en una llamada a procedimiento, Visual Basic puede usar esos operadores de conversión para convertir el tipo de un argumento al tipo de su parámetro correspondiente.

Si pasa el argumento ByRef (Visual Basic), Visual Basic a veces copia el valor del argumento en una variable local del procedimiento en lugar de pasar una referencia. En este caso, cuando el procedimiento vuelve, Visual Basic debe copiar de nuevo el valor de la variable local en el argumento del código de llamada.

Si un valor de argumento ByRef se copia en el procedimiento y el argumento y el parámetro son del mismo tipo, no es necesaria ninguna conversión. Pero si los tipos son diferentes, Visual Basic debe convertir en ambas direcciones. Si uno de los tipos es su clase o tipo de estructura, Visual Basic debe convertirlo tanto al otro tipo como desde el mismo. Si una de estas conversiones es de ampliación, la conversión inversa podría ser de restricción.

Identificador de error: BC32053

Para corregir este error

  • Si es posible, utilice un argumento de llamada del mismo tipo que el del parámetro de procedimiento, para que no sea necesario que Visual Basic realice ninguna conversión.

  • Si necesita llamar al procedimiento con un tipo de argumento distinto al del tipo de parámetro pero no necesita devolver un valor al argumento de llamada, defina el parámetro para que sea ByVal (Visual Basic) en vez de ByRef.

  • Si necesita devolver un valor al argumento de llamada, defina el operador de conversión inversa como Widening (Visual Basic), si es posible.

Vea también

Tareas

Cómo: Definir un operador (Visual Basic)

Cómo: Definir un operador de conversión (Visual Basic)

Referencia

Operator (Instrucción)

Conceptos

Procedimientos en Visual Basic

Argumentos y parámetros de procedimiento (Visual Basic)

Pasar argumentos por valor y por referencia (Visual Basic)

Procedimientos de operador (Visual Basic)

Conversiones de ampliación y de restricción (Visual Basic)

Otros recursos

Conversiones de tipos en Visual Basic