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

Une procédure d’opérateur est une série d’instructions Visual Basic qui définissent le comportement d’un opérateur standard (par exemple, *, <> ou And) sur une classe ou une structure que vous avez définie. Ceci est également appelé surcharge d’opérateur.

Quand définir des procédures d’opérateur

Lorsque vous avez défini une classe ou une structure, vous pouvez déclarer des variables comme étant du type de cette classe ou structure. Parfois, une telle variable doit participer à une opération dans le cadre d’une expression. Pour ce faire, il doit s’agir d’un opérande d’un opérateur.

Visual Basic définit des opérateurs uniquement sur ses types de données fondamentaux. Vous pouvez définir le comportement d’un opérateur lorsqu’un ou les deux opérandes sont du type de votre classe ou structure.

Pour plus d’informations, consultez l’Instruction Operator.

Types de procédures d’opérateur

Une procédure d’opérateur peut être l’un des types suivants :

  • Définition d’un opérateur unaire où l’argument est du type de votre classe ou structure.

  • Définition d’un opérateur binaire où au moins un des arguments est du type de votre classe ou structure.

  • Définition d’un opérateur de conversion où l’argument est du type de votre classe ou structure.

  • Définition d’un opérateur de conversion qui retourne le type de votre classe ou structure.

Les opérateurs de conversion sont toujours unaires et vous utilisez toujours CType comme opérateur que vous définissez.

Syntaxe de déclaration

La syntaxe de déclaration d’une procédure d’opérateur est la suivante :

Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [,  operand2 ]) As datatype

' Statements of the operator procedure.

End Operator

Le mot clé Widening ou Narrowing ne peut être utilisé que pour un opérateur de conversion de type. Le symbole d’opérateur est toujours Fonction CType pour un opérateur de conversion de type.

Vous déclarez deux opérandes pour définir un opérateur binaire et vous déclarez un opérande pour définir un opérateur unaire, y compris un opérateur de conversion de type. Tous les opérandes doivent être déclarés ByVal.

Vous déclarez chaque opérande de la même façon que vous déclarez des paramètres pour les procédures Sub.

Type de données

Étant donné que vous définissez un opérateur sur une classe ou une structure que vous avez définie, au moins l’un des opérandes doit être du type de données de cette classe ou structure. Pour un opérateur de conversion de type, l’opérande ou le type de retour doit être du type de données de la classe ou de la structure.

Pour plus d’informations, consultez l’instruction Operator.

Syntaxe appelante

Vous appelez implicitement une procédure d’opérateur à l’aide du symbole d’opérateur dans une expression. Vous fournissez les opérandes de la même façon que pour les opérateurs prédéfinis.

La syntaxe d’un appel implicite à une procédure d’opérateur est la suivante :

Dim testStruct As StructureName

Dim testNewStruct As nom de structure = testStruct symbole d’opérateurs 10

Illustration de la déclaration et de l’appel

La structure suivante stocke une valeur entière 128 bits signée en tant que parties constituantes d’ordre haut et d’ordre bas. Il définit l’opérateur + pour ajouter deux valeurs veryLong et générer une valeur veryLong résultante.

Public Structure veryLong
    Dim highOrder As Long
    Dim lowOrder As Long
    Public Shared Operator +(ByVal v As veryLong, 
                             ByVal w As veryLong) As veryLong
        Dim sum As New veryLong
        sum = v
        Try
            sum.lowOrder += w.lowOrder
        Catch ex As System.OverflowException
            sum.lowOrder -= (Long.MaxValue - w.lowOrder + 1)
            sum.highOrder += 1
        End Try
        sum.highOrder += w.highOrder
        Return sum
    End Operator
End Structure

L’exemple suivant montre un appel classique à l’opérateur + défini sur veryLong.

Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2

Voir aussi