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

Composants

  • attrlist
    Facultatif. Consultez Liste d'attributs.

  • Public
    Obligatoire. Indique que cette procédure d'opérateur dispose d'un accès Public (Visual Basic).

  • Overloads
    Facultatif. Consultez Overloads (Visual Basic).

  • Shared
    Obligatoire. Indique que cette procédure d'opérateur est une procédure Shared (Visual Basic).

  • Shadows
    Facultatif. Consultez Shadows (Visual Basic).

  • 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 Widening (Visual Basic). Consultez « Conversions étendues et restrictives » 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 Narrowing (Visual Basic). Consultez « Conversions étendues et restrictives » 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 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 paramètres suivants :

    [ ByVal ] operandname [ As operandtype ]

    Élément

    Description

    ByVal

    Facultatif, mais le mécanisme de passage doit être Byval (Visual Basic).

    operandname

    Obligatoire. Nom de la variable représentant cet opérande. Consultez Noms d'éléments déclarés (Visual Basic).

    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
    Facultatif. Bloc d'instructions exécutées par la procédure d'opérateur.

  • returnvalue
    Obligatoire. Valeur retournée par la procédure d'opérateur 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 (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.

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, 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

Voir aussi

Tâches

Comment : définir un opérateur (Visual Basic)

Comment : définir un opérateur de conversion (Visual Basic)

Comment : appeler une procédure d'opérateur (Visual Basic)

Comment : utiliser une classe qui définit des opérateurs (Visual Basic)

Référence

Opérateur IsFalse (Visual Basic)

Opérateur IsTrue (Visual Basic)

Widening (Visual Basic)

Narrowing (Visual Basic)

Concepts

Conversions étendues et restrictives (Visual Basic)

Procédures d'opérateur (Visual Basic)