Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 Strict On de . Type de données de cet opérande. |
type
Facultatif, sauf s’il s’agit Option Strict
On
de . 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
, Optional
ou 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 , , IsTrue Not |
Binaire |
+ , - , * / \ & ^ >> << = <> > >= < <= And Like Mod Or Xor |
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
etIsFalse
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
lesIsTrue
opérateurs, ils doivent tous les deux retourner leBoolean
type.Si vous définissez les opérateurs et les
<<
opérateurs, ils doivent tous les deux spécifier leInteger
type duoperandtype
operand2
.>>
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 And
opérateurs , Or
et Not
Xor
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 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.
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 , And
Or
et IsFalse
IsTrue
les opérateurs.
And
et Or
chacune prend deux opérandes de type abc
et de type abc
de 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
, AndAlso
et OrElse
Or
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
Voir aussi
- Opérateur IsFalse
- IsTrue, opérateur
- Élargissement
- Rétrécissement
- Conversions étendues et restrictives
- Procédures d'opérateur
- Comment : définir un opérateur
- Guide pratique : définir un opérateur de conversion
- Comment : appeler une procédure d'opérateur
- Comment : utiliser une classe qui définit des opérateurs