Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Deklariert das Operatorsymbol, operanden und Code, mit dem eine Operatorprozedur für eine Klasse oder Struktur definiert wird.
Syntax
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Bestandteile
attrlist
Wahlfrei. Siehe Attributliste.
Public
Erforderlich. Gibt an, dass diese Operatorprozedur über öffentlichen Zugriff verfügt.
Overloads
Wahlfrei. Siehe Überladungen.
Shared
Erforderlich. Gibt an, dass es sich bei dieser Operatorprozedur um eine freigegebene Prozedur handelt.
Shadows
Wahlfrei. Siehe Schatten.
Widening
Erforderlich für einen Konvertierungsoperator, es sei denn, Sie geben an Narrowing. Gibt an, dass diese Operatorprozedur eine Widening-Konvertierung definiert. Weitere Informationen finden Sie auf dieser Hilfeseite unter "Verbreitern und Einschränken von Konvertierungen".
Narrowing
Erforderlich für einen Konvertierungsoperator, es sei denn, Sie geben an Widening. Gibt an, dass diese Operatorprozedur eine Schmalungskonvertierung definiert. Weitere Informationen finden Sie auf dieser Hilfeseite unter "Verbreitern und Einschränken von Konvertierungen".
operatorsymbol
Erforderlich. Das Symbol oder die ID des Operators, den diese Operatorprozedur definiert.
operand1
Erforderlich. Der Name und typ des einzelnen Operanden eines unären Operators (einschließlich eines Konvertierungsoperators) oder des linken Operanden eines binären Operators.
operand2
Erforderlich für binäre Operatoren. Der Name und der Typ des rechten Operanden eines binären Operators.
operand1 und operand2 weisen die folgende Syntax und Teile auf:
[ ByVal ] operandname [ As operandtype ]
| Teil | BESCHREIBUNG |
|---|---|
ByVal |
Optional, aber der Übergabemechanismus muss ByVal sein. |
operandname |
Erforderlich. Name der Variablen, die diesen Operanden darstellt. Siehe deklarierte Elementnamen. |
operandtype |
Optional, es sei denn Option Strict , es ist On. Datentyp dieses Operanden. |
type
Optional, es sei denn Option Strict , es ist On. Datentyp des Werts, den die Operatorprozedur zurückgibt.
statements
Wahlfrei. 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 nur in einer Klasse oder Struktur verwendet werden Operator . Dies bedeutet, dass der Deklarationskontext für einen Operator keine Quelldatei, ein Namespace, ein Modul, eine Schnittstelle, eine Prozedur oder ein Block sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.
Alle Operatoren müssen sein Public Shared. Sie können weder operand noch ParamArrayOptionaloperand angebenByRef.
Sie können das Operatorsymbol oder den Bezeichner nicht verwenden, um einen Rückgabewert zu enthalten. Sie müssen die Return Anweisung verwenden und einen Wert angeben. Eine beliebige Anzahl von Return Anweisungen kann an einer beliebigen Stelle in der Prozedur angezeigt werden.
Das Definieren eines Operators auf diese Weise wird als Operatorüberladung bezeichnet, unabhängig davon, ob Sie das Overloads Schlüsselwort verwenden. In der folgenden Tabelle sind die Operatoren aufgeführt, die Sie definieren können.
| Typ | Betriebspersonal |
|---|---|
| Unär |
+, , -IsFalse, , IsTrueNot |
| Binär |
+, -, , *, /, &^\, >>, <<, ><>And<=>=<=, , ModOrLikeXor |
| Konvertierung (unär) | CType |
Beachten Sie, dass der = Operator in der Binärliste der Vergleichsoperator ist, nicht der Zuordnungsoperator.
Wenn Sie definieren CType, müssen Sie entweder Widening oder Narrowing.
Übereinstimmene Paare
Sie müssen bestimmte Operatoren als übereinstimmene Paare definieren. Wenn Sie einen der beiden Operatoren eines solchen Paares definieren, müssen Sie auch die andere definieren. Die übereinstimmenen Paare sind die folgenden:
=und<>>und<>=und<=IsTrueundIsFalse
Datentypbeschränkungen
Jeder von Ihnen definierte Operator muss die Klasse oder Struktur einbeziehen, für die Sie sie definieren. Dies bedeutet, dass die Klasse oder Struktur als Datentyp der folgenden Elemente angezeigt werden muss:
Der Operand eines unären Operators.
Mindestens einer der Operanden eines binären Operators.
Entweder der Operand oder der Rückgabetyp eines Konvertierungsoperators.
Bestimmte Operatoren haben zusätzliche Datentypbeschränkungen, wie folgt:
Wenn Sie die
IsTrueOperatorenIsFalsedefinieren, müssen beide denBooleanTyp zurückgeben.Wenn Sie die Operatoren und die
<<Operatoren>>definieren, müssen beide denIntegerTyp für denoperandtypevonoperand2angeben.
Der Rückgabetyp muss nicht dem Typ eines der beiden Operanden entsprechen. Ein Vergleichsoperator, z = . B. oder <> ein Vergleichsoperator, kann auch dann zurückgegeben Boolean werden, wenn keines der Operanden ist Boolean.
Logische und bitweise Operatoren
Die Operatoren , Or, Notund Xor Die AndOperatoren können logische oder bitweise Vorgänge in Visual Basic ausführen. Wenn Sie jedoch einen dieser Operatoren für eine Klasse oder Struktur definieren, können Sie nur den bitweisen Vorgang definieren.
Sie können den AndAlso Operator nicht direkt mit einer Operator Anweisung definieren. Sie können jedoch verwenden AndAlso , wenn Sie die folgenden Bedingungen erfüllt haben:
Sie haben für dieselben Operandentypen definiert
And, fürAndAlsodie Sie verwenden möchten.Die Definition der
AndEigenschaft gibt denselben Typ wie die Klasse oder Struktur zurück, für die Sie ihn definiert haben.Sie haben den
IsFalseOperator für die Klasse oder Struktur definiert, für die Sie definiertAndhaben.
Ebenso können Sie verwenden OrElse , wenn Sie für dieselben Operanden definiert haben Or , mit dem Rückgabetyp der Klasse oder Struktur, und Sie haben die Klasse oder Struktur definiert IsTrue .
Verbreiterung und Verengung von Konvertierungen
Eine Erweiterungskonvertierung ist zur Laufzeit immer erfolgreich, während eine schmale Konvertierung zur Laufzeit fehlschlagen kann. Weitere Informationen finden Sie unter Widening and Narrowing Conversions.
Wenn Sie eine Konvertierungsprozedur als Prozedur deklarieren, darf ihr Prozedurcode Wideningkeine Fehler generieren. Dies bedeutet Folgendes:
Er muss immer einen gültigen Wert vom Typ
typezurückgeben.Es muss alle möglichen Ausnahmen und andere Fehlerbedingungen behandeln.
Es muss alle Fehlerrückrufe von allen von ihr aufgerufenen Prozeduren behandeln.
Wenn es eine Möglichkeit gibt, dass eine Konvertierungsprozedur möglicherweise nicht erfolgreich ist oder eine unbehandelte Ausnahme verursacht, müssen Sie sie Narrowingdeklarieren.
Beispiel
Im folgenden Codebeispiel wird die Operator Anweisung verwendet, um die Gliederung einer Struktur zu definieren, die Operatorprozeduren für die AndOperatoren , Or, und IsFalseIsTrue Operatoren enthält.
And und Or jeweils zwei Operanden vom Typ abc und Rückgabetyp abc.
IsFalse und IsTrue jeder nimmt einen einzelnen Operanden vom Typ abc und gibt zurück Boolean. Diese Definitionen ermöglichen die Verwendung Anddes aufrufenden Codes , , AndAlsoOrund OrElse mit Operanden vom Typ abc.
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
- Erweiterung
- Verengung
- Erweiternde und eingrenzende Konvertierungen
- Operatorprozeduren
- Vorgehensweise: Definieren eines Operators
- Vorgehensweise: Definieren eines Konvertierungsoperators
- Vorgehensweise: Aufrufen einer Operatorprozedur
- Vorgehensweise: Verwenden einer Klasse, die Operatoren definiert