Operatorprozeduren (Visual Basic)

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

Definieren von Operator Prozeduren

Wenn Sie eine Klasse oder Struktur definiert haben, können Sie Variablen so deklarieren, dass Sie vom Typ dieser Klasse oder Struktur sind. Manchmal muss eine solche Variable an einem Vorgang als Teil eines Ausdrucks teilnehmen. Zu diesem Zweck muss Sie ein Operand eines Operators sein.

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

Weitere Informationen finden Sie unter Operator Statement.

Typen von Operator Prozeduren

Eine Operator Prozedur 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 der mindestens eines der Argumente vom Typ der Klasse oder Struktur ist.

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

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

Konvertierungs Operatoren sind immer Unär, und Sie verwenden immer CType als Operator, den Sie definieren.

Deklarationssyntax

Die Syntax zum Deklarieren einer Operator Prozedur lautet wie folgt:

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

' Statements of the operator procedure.

End Operator

Sie verwenden das Widening Narrowing Schlüsselwort oder nur für einen Typkonvertierungs Operator. Das Operator Symbol ist immer CType-Funktion für einen Typkonvertierungs Operator.

Sie deklarieren zwei Operanden, um einen binären Operator zu definieren, und Sie deklarieren einen Operanden, um einen unären Operator, einschließlich eines Typkonvertierungs Operators, zu definieren. Alle Operanden müssen deklariert werden ByVal .

Sie deklarieren jeden Operanden auf dieselbe Weise, wie Sie Parameter für unter Prozedurendeklarieren.

Datentyp

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

Weitere Informationen finden Sie unter Operator Statement.

Aufruf Syntax

Sie rufen eine Operator Prozedur implizit mithilfe des-Operator Symbols in einem Ausdruck auf. Sie stellen die Operanden auf die gleiche Weise wie für vordefinierte Operatoren bereit.

Die Syntax für einen impliziten aufrufsvorgang für eine Operator Prozedur lautet wie folgt:

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct Operatorsymbol 10

Abbildung der Deklaration und des Aufruf

In der folgenden Struktur wird ein ganzzahliger 128-Bit-ganzzahliger Wert als die einzelnen Teile der Reihenfolge und der unteren Reihenfolge gespeichert. Er definiert den + Operator, um zwei veryLong Werte hinzuzufügen und einen resultierenden Wert zu generieren veryLong .

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 aufrufsoperator, der für + definiert ist veryLong .

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

Weitere Informationen