Operator Statement
Deklariert das Operatorsymbol, die Operanden und den Code zum Definieren einer Operatorprozedur für eine Klasse oder eine Struktur.
Syntax
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Bestandteile
attrlist
Optional. Siehe Attributliste.
Public
Erforderlich. Gibt an, dass diese Operatorprozedur Public Zugriff hat.
Overloads
Optional. Siehe Überladungen.
Shared
Erforderlich. Gibt an, dass diese Operatorprozedur eine Shared Prozedur ist.
Shadows
Optional. Siehe Shadows.
Widening
Erforderlich für einen Konvertierungsoperator, es sei denn, Sie legen Narrowing
fest. Gibt an, dass diese Operatorprozedur eine erweiternde Konvertierung definiert. Siehe „Erweiternde und eingrenzende Konvertierungen“ auf dieser Hilfe-Website.
Narrowing
Bei einem Konvertierungsoperator erforderlich, es sei denn, Sie legen Widening
fest. Gibt an, dass diese Operatorprozedur eine einschränkende Konvertierung definiert. Siehe „Erweiternde und eingrenzende Konvertierungen“ auf dieser Hilfe-Website.
operatorsymbol
Erforderlich. Das Symbol oder der Bezeichner des Operators, der durch diese Operatorprozedur definiert wird.
operand1
Erforderlich. Der Name und der Typ des einzelnen Operanden eines unären Operators (einschließlich eines Konvertierungsoperators) oder der linke Operand eines binären Operators.
operand2
Bei binären Operatoren erforderlich. Der Name und der Typ des linken Operanden eines binären Operators.
operand1
und operand2
haben die folgende Syntax und die folgenden Bestandteile:
[ ByVal ] operandname [ As operandtype ]
Teil | Beschreibung |
---|---|
ByVal |
Optional, aber der Übergabemechanismus muss ByVal sein. |
operandname |
Erforderlich. Name der Variablen, die für diesen Operanden steht. Siehe Declared Element Names. |
operandtype |
Optional, außer für Option Strict ist On festgelegt. Datentyp dieses Operanden. |
type
Optional, außer für Option Strict
ist On
festgelegt. Datentyp des Werts, den die Operatorprozedur zurückgibt.
statements
Optional. Block von Anweisungen, die von der Operatorprozedur ausgeführt werden.
returnvalue
Erforderlich. Der Wert, den die Operatorprozedur an den aufrufenden Code zurückgibt.
End
Operator
Erforderlich. Beendet die Definition dieser Operatorprozedur.
Bemerkungen
Sie können Operator
nur in einer Klasse oder Struktur verwenden. Daher kann der Deklarationskontext eines Operators keine Quelldatei, kein Namespace, kein Modul, keine Schnittstelle, keine Prozedur und kein Block sein. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.
Alle Operatoren müssen Public Shared
sein. Sie können für keinen der beiden Operanden ByRef
, Optional
oder ParamArray
festlegen.
Das Symbol oder der Bezeichner des Operators kann keinen Rückgabewert enthalten. Sie müssen die Return
-Anweisung verwenden, und sie muss einen Wert festlegen. Die Prozedur kann beliebig viele Return
-Anweisungen an jeder beliebigen Stelle enthalten.
Die derartige Definition eines Operators wird als Operatorüberladung bezeichnet, unabhängig davon, ob Sie das Schlüsselwort Overloads
verwenden oder nicht. In der folgenden Tabelle sind die Operatoren aufgelistet, die Sie definieren können.
type | Operatoren |
---|---|
Unär | + , - , IsFalse , IsTrue , Not |
Binär | + , - , * , / , \ , & , ^ , >> , << , = , <> , > , >= , < , <= , And , Like , Mod , Or , Xor |
Konvertierung (unär) | CType |
Beachten Sie, dass der Operator =
in der binären Liste der Vergleichsoperator ist und nicht der Zuweisungsoperator.
Bei der Definition von CType
müssen Sie entweder Widening
oder Narrowing
angeben.
Übereinstimmende Paare
Sie müssen bestimmte Operatoren als übereinstimmende Paare definieren. Wenn Sie einen Operator eines solchen Paares definieren, müssen Sie den anderen ebenfalls definieren. Die übereinstimmenden Paare sind:
=
und<>
>
und<
>=
und<=
IsTrue
undIsFalse
Datentypeinschränkungen
Jeder definierte Operator muss die Klasse oder Struktur einbeziehen, in der Sie ihn definieren. Die Klasse oder Struktur muss dementsprechend als Datentyp für Folgendes angegeben sein:
den Operanden eines unären Operators
mindestens einen der Operanden eines binären Operators
den Operanden oder den Rückgabetyp eines Konvertierungsoperators
Bei bestimmten Operatoren gelten zusätzliche Datentypbeschränkungen:
Wenn Sie die Operatoren
IsTrue
undIsFalse
definieren, müssen beide den TypBoolean
zurückgeben.Wenn Sie die Operatoren
<<
und>>
definieren, müssen beide den TypInteger
für denoperandtype
vonoperand2
angeben.
Der Rückgabetyp muss nicht dem Typ der beiden Operanden entsprechen. Beispielsweise kann ein Vergleichsoperator wie =
oder <>
auch dann Boolean
zurückgeben, wenn keiner der beiden Operanden Boolean
ist.
Logische und bitweise Operatoren
Die Operatoren And
, Or
, Not
und Xor
können logische oder bitweise Operationen in Visual Basic ausführen. Wenn Sie jedoch einen dieser Operatoren in einer Klasse oder Struktur definieren, können Sie nur seine bitweise Operation definieren.
Den Operator AndAlso
können Sie nicht direkt mit einer Operator
-Anweisung definieren. Sie können allerdings AndAlso
verwenden, sofern die folgenden Bedingungen erfüllt sind:
Sie haben für dieselben Operandentypen, die Sie für
AndAlso
verwenden möchten,And
definiert.Ihre Definition von
And
gibt denselben Typ zurück wie die Klasse oder Struktur, in der Sie ihn definiert haben.Sie haben den Operator
IsFalse
in der Klasse oder Struktur definiert, in der SieAnd
definiert haben.
Ebenso können Sie OrElse
verwenden, wenn Sie Or
auf denselben Operanden mit dem Rückgabetyp der Klasse oder Struktur und IsTrue
in der Klasse oder Struktur definiert haben.
Widening and Narrowing Conversions
Eine erweiternde Konvertierung ist zur Laufzeit immer erfolgreich, während eine einschränkende Konvertierung zur Laufzeit fehlschlagen kann. Weitere Informationen finden Sie unter Widening and Narrowing Conversions.
Wenn Sie eine Konvertierungsprozedur als Widening
deklarieren, darf der Prozedurcode keine Fehler erzeugen. Dies bedeutet Folgendes:
Er muss immer einen gültigen Wert des Typs
type
zurückgeben.Er muss alle möglichen Ausnahmen und sonstigen Fehlerbedingungen verarbeiten können.
Er muss alle Fehlerrückgaben von allen aufgerufenen Prozeduren verarbeiten können.
Selbst wenn nur die geringe Wahrscheinlichkeit besteht, dass eine Konvertierungsprozedur fehlschlägt oder zu einem Ausnahmefehler führt, müssen Sie sie als Narrowing
deklarieren.
Beispiel
Im folgenden Codebeispiel wird mit der Operator
-Anweisung die Gliederung einer Struktur definiert, die die Operatorprozeduren für die Operatoren And
, Or
, IsFalse
und IsTrue
enthält. And
und Or
verwenden jeweils zwei Operanden des Typs abc
und geben Typ abc
zurück. IsFalse
und IsTrue
verwenden jeweils einen einzelnen Operanden des Typs abc
und geben Boolean
zurück. Mit diesen Definitionen kann der aufrufende Code And
, AndAlso
, Or
und OrElse
mit Operanden des Typs abc
verwenden.
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
Siehe auch
- IsFalse-Operator
- IsTrue-Operator
- Widening
- Narrowing
- Widening and Narrowing Conversions
- Operatorprozeduren
- Vorgehensweise: Definieren eines Operators
- Vorgehensweise: Definieren eines Konvertierungsoperators
- Vorgehensweise: Aufrufen einer Operatorprozedur
- Vorgehensweise: Verwenden einer Klasse, die Operatoren definiert