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
- Vorgehensweisen
- Sub-Prozeduren
- Function-Prozeduren
- Eigenschaftenprozeduren
- Parameter und Argumente von Prozeduren
- Operator Statement
- Vorgehensweise: Definieren eines Operators
- Vorgehensweise: Definieren eines Konvertierungsoperators
- Vorgehensweise: Aufrufen einer Operatorprozedur
- Vorgehensweise: Verwenden einer Klasse, die Operatoren definiert