Partager via


Operator, instruction

Déclare le symbole d’opérateur, les opérandes et le code qui définissent une procédure d’opérateur sur une classe ou une structure.

Syntaxe

[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
    [ statements ]
    [ statements ]
    Return returnvalue
    [ statements ]
End Operator

Pièces

attrlist
Optionnel. Consultez la liste des attributs.

Public
Obligatoire. Indique que cette procédure d’opérateur dispose d’un accès public .

Overloads
Optionnel. Voir Surcharges.

Shared
Obligatoire. Indique que cette procédure d’opérateur est une procédure partagée .

Shadows
Optionnel. Voir Ombres.

Widening
Obligatoire pour un opérateur de conversion, sauf si vous spécifiez Narrowing. Indique que cette procédure d’opérateur définit une conversion d’élargissement . Consultez « Conversions étendues et étroites » dans cette page d’aide.

Narrowing
Obligatoire pour un opérateur de conversion, sauf si vous spécifiez Widening. Indique que cette procédure d’opérateur définit une conversion étroite . Consultez « Conversions étendues et étroites » dans cette page d’aide.

operatorsymbol
Obligatoire. Symbole ou identificateur de l’opérateur défini par cette procédure d’opérateur.

operand1
Obligatoire. Nom et type de l’opérande unique d’un opérateur unaire (y compris un opérateur de conversion) ou de l’opérande gauche d’un opérateur binaire.

operand2
Obligatoire pour les opérateurs binaires. Nom et type de l’opérande droit d’un opérateur binaire.

operand1 et operand2 ont la syntaxe et les parties suivantes :

[ ByVal ] operandname [ As operandtype ]

Composant Descriptif
ByVal Facultatif, mais le mécanisme de passage doit être ByVal.
operandname Obligatoire. Nom de la variable représentant cet opérande. Voir Noms d’éléments déclarés.
operandtype Facultatif, sauf s’il s’agit Option StrictOnde . Type de données de cet opérande.

type
Facultatif, sauf s’il s’agit Option StrictOnde . Type de données de la valeur retournée par la procédure opérateur.

statements
Optionnel. Bloc d’instructions exécutées par la procédure opérateur.

returnvalue
Obligatoire. Valeur que la procédure opérateur retourne au code appelant.

End Operator
Obligatoire. Met fin à la définition de cette procédure d’opérateur.

Remarques

Vous ne pouvez utiliser Operator que dans une classe ou une structure. Cela signifie que le contexte de déclaration d’un opérateur ne peut pas être un fichier source, un espace de noms, un module, une interface, une procédure ou un bloc. Pour plus d’informations, consultez Contextes de déclaration et niveaux d’accès par défaut.

Tous les opérateurs doivent être Public Shared. Vous ne pouvez pas spécifier ByRef, Optionalou ParamArray pour l’opérande.

Vous ne pouvez pas utiliser le symbole d’opérateur ou l’identificateur pour contenir une valeur de retour. Vous devez utiliser l’instruction Return , et elle doit spécifier une valeur. Un nombre quelconque d’instructions Return peut apparaître n’importe où dans la procédure.

La définition d’un opérateur de cette façon est appelée surcharge d’opérateur, que vous utilisiez ou non le Overloads mot clé. Le tableau suivant répertorie les opérateurs que vous pouvez définir.

Catégorie Opérateurs
Unaire +, , -IsFalse, , IsTrueNot
Binaire +, -, */\&^>><<=<>>>=<<=AndLikeModOrXor
Conversion (unaire) CType

Notez que l’opérateur = de la liste binaire est l’opérateur de comparaison, et non l’opérateur d’affectation.

Lorsque vous définissezCType, vous devez spécifier l’une ou l’autre Widening .Narrowing

Paires mises en correspondance

Vous devez définir certains opérateurs en tant que paires correspondantes. Si vous définissez l’un ou l’autre opérateur d’une telle paire, vous devez également définir l’autre. Les paires correspondantes sont les suivantes :

  • = et <>

  • > et <

  • >= et <=

  • IsTrue et IsFalse

Restrictions de type de données

Chaque opérateur que vous définissez doit impliquer la classe ou la structure sur laquelle vous la définissez. Cela signifie que la classe ou la structure doit apparaître comme type de données des éléments suivants :

  • Opérande d’un opérateur unaire.

  • Au moins l’un des opérandes d’un opérateur binaire.

  • Opérande ou type de retour d’un opérateur de conversion.

Certains opérateurs ont des restrictions de type de données supplémentaires, comme suit :

  • Si vous définissez les opérateurs et IsFalse les IsTrue opérateurs, ils doivent tous les deux retourner le Boolean type.

  • Si vous définissez les opérateurs et les << opérateurs, ils doivent tous les deux spécifier le Integer type du operandtypeoperand2.>>

Le type de retour n’a pas besoin de correspondre au type d’opérande. Par exemple, un opérateur de comparaison tel que = ou peut retourner Boolean même si aucun opérande n’est Boolean<> .

Opérateurs de bits et opérateurs logiques

Les Andopérateurs , Oret NotXor les opérateurs peuvent effectuer des opérations logiques ou au niveau du bit dans Visual Basic. Toutefois, si vous définissez l’un de ces opérateurs sur une classe ou une structure, vous ne pouvez définir que son opération au niveau du bit.

Vous ne pouvez pas définir l’opérateur AndAlso directement avec une Operator instruction. Toutefois, vous pouvez utiliser AndAlso si vous avez rempli les conditions suivantes :

  • Vous avez défini And sur les mêmes types d’opérandes que vous souhaitez utiliser pour AndAlso.

  • Votre définition de And retourne le même type que la classe ou la structure sur laquelle vous l’avez définie.

  • Vous avez défini l’opérateur IsFalse sur la classe ou la structure sur laquelle vous avez défini And.

De même, vous pouvez utiliser OrElse si vous avez défini Or sur les mêmes opérandes, avec le type de retour de la classe ou de la structure, et que vous avez défini IsTrue sur la classe ou la structure.

Conversions étendues et étroites

Une conversion étendue réussit toujours au moment de l’exécution, tandis qu’une conversion étroite peut échouer au moment de l’exécution. Pour plus d’informations, consultez Widening and Narrowing Conversions.

Si vous déclarez une procédure de conversion à être Widening, votre code de procédure ne doit pas générer d’échecs. Cela signifie :

  • Elle doit toujours retourner une valeur valide de type type.

  • Il doit gérer toutes les exceptions possibles et d’autres conditions d’erreur.

  • Il doit gérer les retours d’erreur de toutes les procédures qu’il appelle.

S’il est possible qu’une procédure de conversion ne réussisse pas ou qu’elle provoque une exception non gérée, vous devez la déclarer comme étant Narrowing.

Exemple :

L’exemple de code suivant utilise l’instruction Operator pour définir le plan d’une structure qui inclut des procédures d’opérateur pour les opérateurs , AndOret IsFalseIsTrue les opérateurs. And et Or chacune prend deux opérandes de type abc et de type abcde retour . IsFalse et IsTrue chacun prend un opérande unique de type abc et de retour Boolean. Ces définitions permettent au code appelant d’utiliser And, AndAlsoet OrElseOravec des opérandes de type abc.

Public Structure abc
    Dim d As Date
    Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc
        Dim r As New abc
        ' Insert code to calculate And of x and y.
        Return r
    End Operator
    Public Shared Operator Or(ByVal x As abc, ByVal y As abc) As abc
        Dim r As New abc
        ' Insert code to calculate Or of x and y.
        Return r
    End Operator
    Public Shared Operator IsFalse(ByVal z As abc) As Boolean
        Dim b As Boolean
        ' Insert code to calculate IsFalse of z.
        Return b
    End Operator
    Public Shared Operator IsTrue(ByVal z As abc) As Boolean
        Dim b As Boolean
        ' Insert code to calculate IsTrue of z.
        Return b
    End Operator
End Structure

Voir aussi