Operator Statement
Déclare le symbole, les opérandes et le code qui définissent une procédure d’opérateur dans 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
Éléments
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. Consultez Shadows.
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 étendue. Consultez « Conversions restrictives et étendues » sur 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 restrictive. Consultez « Conversions restrictives et étendues » sur 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
emploient la syntaxe et les éléments suivants :
[ ByVal ] operandname [ As operandtype ]
Élément | Description |
---|---|
ByVal |
Facultatif, mais le mécanisme de passage doit être ByVal. |
operandname |
Obligatoire. Nom de la variable représentant cet opérande. Consultez Declared Element Names. |
operandtype |
Facultatif, sauf si Option Strict a la valeur On . Type de données de cet opérande. |
type
Facultatif, sauf si Option Strict
a la valeur On
. Type de données de la valeur retournée par la procédure d’opérateur.
statements
Optionnel. Bloc d’instructions exécutées par l’opérateur.
returnvalue
Obligatoire. Valeur que la procédure d’opérateur retourne au code appelant.
End
Operator
Obligatoire. Met fin à la définition de cette procédure d’opérateur.
Notes
Vous pouvez utiliser Operator
uniquement dans une classe ou une structure. Cela signifie que le contexte de déclaration pour 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
, Optional
ou ParamArray
pour l’un des opérandes.
Vous ne pouvez pas utiliser le symbole ou l’identificateur de l’opérateur pour contenir une valeur de retour. Vous devez utiliser l’instruction Return
et 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 mot clé Overloads
. Le tableau suivant présente les opérateurs que vous pouvez définir.
Type | Opérateurs |
---|---|
Unaire | + , - , IsFalse , IsTrue , Not |
Binaire | + , - , * , / , \ , & , ^ , >> , << , = , <> , > , >= , < , <= , And , Like , Mod , Or , Xor |
Conversion (unaire) | CType |
Notez que l’opérateur =
dans la liste binaire est l’opérateur de comparaison, et non l’opérateur d’assignation.
Lorsque vous définissez CType
, vous devez spécifier Widening
ou Narrowing
.
Paires correspondantes
Vous devez définir certains opérateurs en tant que paires correspondantes. Si vous définissez l’un des opérateurs d’une telle paire, vous devez également définir l’autre. Les paires correspondantes sont les suivantes :
=
et<>
>
et<
>=
et<=
IsTrue
etIsFalse
Restrictions des types de données
Chaque opérateur que vous définissez doit impliquer la classe ou la structure sur laquelle vous le définissez. Cela signifie que la classe ou la structure doit apparaître en tant que 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
IsTrue
etIsFalse
, ils doivent tous deux retourner le typeBoolean
.Si vous définissez les opérateurs
<<
et>>
, ils doivent tous deux spécifier le typeInteger
pour leoperandtype
deoperand2
.
Le type de retour n’a pas besoin de correspondre au type de l’un des opérandes. 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 opérateurs And
, Or
, Not
et Xor
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 pouvez ne définir son opération qu’au niveau du bit.
Vous ne pouvez pas définir l’opérateur AndAlso
directement avec une instruction Operator
. 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 pourAndAlso
.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éfiniAnd
.
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.
Widening and Narrowing Conversions
Une conversion étendue réussit toujours au moment de l’exécution, tandis qu’une conversion restrictive 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 comme 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
.Elle doit gérer toutes les exceptions possibles et d’autres conditions d’erreur.
Elle doit gérer les retours d’erreur de toutes les procédures qu’elle appelle.
S’il est possible qu’une procédure de conversion échoue ou qu’elle provoque une exception non gérée, vous devez la déclarer comme Narrowing
.
Exemple
L’exemple de code suivant utilise l’instruction Operator
pour définir le contour d’une structure qui inclut des procédures d’opérateur pour les opérateurs And
, Or
, IsFalse
et IsTrue
. And
et Or
prennent chacun deux opérandes de type abc
et de type de retour abc
. IsFalse
et IsTrue
prennent chacun un opérande unique de type abc
et retournent Boolean
. Ces définitions permettent au code appelant d’utiliser And
, AndAlso
, Or
et OrElse
avec 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