Partager via


La copie de la valeur du paramètre 'ByRef' '<NomParamètre>' dans l'argument correspondant passe du type '<NomType1>' au type '<NomType2>'

Mise à jour : novembre 2007

Copying the value of 'ByRef' parameter '<parametername>' back to the matching argument narrows from type '<typename1>' to type '<typename2>'

Une procédure est appelée avec un argument qui s'étend au type de paramètre correspondant, et la conversion du paramètre à l'argument est restrictive.

Lorsque vous définissez une classe ou une structure, vous pouvez définir un ou plusieurs opérateurs de conversion pour convertir ce type de classe ou de structure en d'autres types. Vous pouvez également définir des opérateurs de conversion inverse pour convertir ces autres types en votre type de classe ou de structure. Lorsque vous utilisez votre type de classe ou de structure dans un appel de procédure, Visual Basic peut utiliser ces opérateurs de conversion pour convertir le type d'un argument en type de son paramètre correspondant.

Si vous passez l'argument ByRef, Visual Basic copie parfois sa valeur dans une variable locale de la procédure au lieu de passer une référence. Dans ce cas, lors du retour de la procédure, Visual Basic doit copier la valeur de la variable locale dans l'argument du code appelant.

Si une valeur d'argument ByRef est copiée dans la procédure et que l'argument et le paramètre sont du même type, aucune conversion n'est nécessaire. Mais si les types sont différents, Visual Basic doit effectuer une conversion dans les deux sens. Si l'un des types est votre type de classe ou de structure, Visual Basic doit le convertir vers et à partir de l'autre type. Si l'une de ces conversions est étendue, la conversion inverse peut être restrictive.

ID d'erreur : BC32053

Pour corriger cette erreur

  • Si possible, utilisez un argument d'appel du même type que le paramètre de procédure. Ainsi, Visual Basic n'a pas besoin d'effectuer une conversion.

  • Si vous devez appeler la procédure avec un type d'argument autre que le type du paramètre, sans retourner une valeur dans l'argument d'appel, affectez au paramètre la valeur ByVal au lieu de ByRef.

  • Si vous devez retourner une valeur dans l'argument d'appel, affectez à l'opérateur de conversion inverse la valeur Widening, si possible.

Voir aussi

Tâches

Comment : définir un opérateur

Comment : définir un opérateur de conversion

Concepts

Procédures dans Visual Basic

Paramètres et arguments d'une procédure

Passage d'arguments par valeur et par référence

Procédures d'opérateur

Conversions étendues et restrictives

Référence

Operator, instruction

Autres ressources

Conversions de type en Visual Basic