Freigeben über


Operatorprozeduren (Visual Basic)

Eine Operatorprozedur ist eine Reihe von Visual Basic-Anweisungen, die das Verhalten eines Standardoperators (z. B. *, <> oder And) für eine von Ihnen definierte Klasse oder Struktur definieren. Dies wird auch als Operatorüberladung bezeichnet.

Gründe für das Definieren von Operatorprozeduren

Wenn Sie eine Klasse oder Struktur definiert haben, können Sie Variablen vom Typ dieser Klasse oder Struktur deklarieren. Manchmal muss eine solche Variable als Teil eines Ausdrucks an einem Vorgang teilnehmen. Dazu muss es sich um einen Operanden eines Operators handeln.

Visual Basic definiert Operatoren nur für die grundlegenden Datentypen. Sie können das Verhalten eines Operators definieren, wenn mindestens einer der Operanden vom Typ der Klasse oder Struktur ist.

Weitere Informationen finden Sie unter Operator-Anweisung.

Typen von Operatorprozeduren

Eine Operatorprozedur kann einen der folgenden Typen aufweisen:

  • Eine Definition eines unären Operators, bei dem das Argument vom Typ der Klasse oder Struktur ist.

  • Eine Definition eines binären Operators, bei dem mindestens ein Argument vom Typ der Klasse oder Struktur ist.

  • Eine Definition eines Konvertierungsoperators, bei dem das Argument vom Typ der Klasse oder Struktur ist.

  • Eine Definition eines Konvertierungsoperators, der den Typ der Klasse oder Struktur zurückgibt.

Konvertierungsoperatoren sind immer unär, und Sie verwenden immer CType als definierten Operator.

Deklarationssyntax

Die Syntax zum Deklarieren einer Operatorprozedur lautet wie folgt:

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

' Statements of the operator procedure.

End Operator

Sie verwenden eines der Schlüsselwörter Widening oder Narrowing nur für einen Typkonvertierungsoperator. Das Operatorsymbol ist für einen Typkonvertierungsoperator immer CType-Funktion.

Sie deklarieren zwei Operanden zum Definieren eines binären Operators, und Sie deklarieren einen Operanden zum Definieren eines unären Operators, einschließlich eines Typkonvertierungsoperators. Alle Operanden müssen als ByVal deklariert werden.

Sie deklarieren jeden Operanden auf die gleiche Weise wie Parameter für Unterprozeduren.

Datentyp

Da Sie einen Operator für eine Klasse oder Struktur definieren, die Sie definiert haben, muss mindestens einer der Operanden vom Datentyp dieser Klasse oder Struktur sein. Für einen Typkonvertierungsoperator muss entweder der Operand oder der Rückgabetyp vom Datentyp der Klasse oder Struktur sein.

Weitere Informationen finden Sie unter Operator-Anweisung.

Aufrufsyntax

Sie rufen eine Operatorprozedur implizit auf, indem Sie das Operatorsymbol in einem Ausdruck verwenden. Die Operanden geben Sie auf die gleiche Weise an wie für vordefinierte Operatoren.

Die Syntax für einen impliziten Aufruf einer Operatorprozedur lautet wie folgt:

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operatorsymbol 10

Abbildung der Deklaration und des Aufrufs

In der folgenden Struktur wird ein 128-Bit-Integerwert mit Vorzeichen als konstituierende Teile mit hoher und niedriger Ordnung gespeichert. Er definiert den +-Operator, sodass zwei veryLong-Werte hinzugefügt und ein resultierender veryLong-Wert generiert werden.

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

Das folgende Beispiel zeigt einen typischen Aufruf des für veryLong definierten +-Operators.

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

Weitere Informationen