Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
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.
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
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 (Visual Basic).
Tous les opérateurs doivent être Public Shared. Vous ne pouvez pas spécifier ByRef, Optional ou ParamArray pour l'un ou l'autre des opérandes.
Vous ne pouvez pas utiliser le symbole ou l'identificateur d'opérateur pour stocker une valeur de retour. Vous devez utiliser l'instruction Return, et elle doit spécifier une valeur. Il n'existe pas de limite au nombre d'instructions Return pouvant apparaître n'importe où dans la procédure.
Cette définition d'un opérateur 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 appariées
Vous devez définir certains opérateurs comme des paires appariées. Si vous définissez l'un des opérateurs de cette paire, vous devez également définir l'autre. Les paires appariées 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 le définissez. Cela signifie que la classe ou la structure doit être définie comme le type de données des éléments suivants :
-
l'opérande d'un opérateur unaire ;
-
au moins l'un des opérandes d'un opérateur binaire ;
-
l'opérande ou le type de retour d'un opérateur de conversion.
Certains opérateurs présentent d'autres restrictions de type de données, à savoir :
-
Si vous définissez les opérateurs IsTrue et IsFalse, tous deux doivent retourner le type Boolean.
-
Si vous définissez les opérateurs << et >>, tous deux doivent spécifier le type Integer pour operandtype de operand2.
Le type de retour ne doit pas correspondre au type de l'un ou l'autre des opérandes. Par exemple, un opérateur de comparaison tel que = ou <> peut retourner Boolean même si aucun des opérandes n'a la valeur Boolean.
Opérateurs logiques et au niveau du bit
Les opérateurs And, Or, Not et Xor peuvent exécuter des opérations logiques ou au niveau du bit en Visual Basic. Toutefois, si vous définissez l'un de ces opérateurs sur une classe ou une structure, vous pouvez définir uniquement son opération au niveau du bit.
Vous ne pouvez pas définir directement l'opérateur AndAlso 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érande 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éfini.
-
Vous avez défini l'opérateur IsFalse sur la classe ou la structure sur laquelle vous avez défini And.
De la même façon, 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 la structure, et si vous avez défini IsTrue sur la classe ou la structure.
Conversions étendues et restrictives
Une conversion étendue réussit toujours au moment de l'exécution, alors qu'une conversion restrictive peut échouer au moment de l'exécution. Pour plus d'informations, consultez Conversions étendues et restrictives (Visual Basic).
Si vous déclarez une procédure de conversion comme étant Widening, votre code de procédure ne doit pas générer d'échecs. Notamment :
-
Elle doit toujours retourner une valeur valide de type type.
-
Elle doit gérer toutes les exceptions possibles et les autres conditions d'erreur.
-
Elle doit gérer les retours en cas d'erreur des procédures qu'elle appelle.
S'il existe un risque d'échec d'une procédure de conversion, ou si celle-ci peut générer une exception non gérée, vous devez la déclarer comme étant Narrowing.
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, IsFalse et IsTrue. And et Or acceptent chacun deux opérandes de type abc et retournent le type abc. IsFalse et IsTrue acceptent 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