Freigeben über


Operator-Anweisung

Aktualisiert: November 2007

Deklariert Symbol, Operanden und Code eines Operators, die eine Operatorprozedur für eine Klasse oder Struktur definieren.

[ <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 (Visual Basic)-Zugriff aufweist.

  • Overloads
    Optional. Siehe Overloads.

  • Shared
    Erforderlich. Gibt an, dass die Operatorprozedur eine Shared (Visual Basic)-Prozedur ist.

  • Shadows
    Optional. Siehe Shadows.

  • Widening
    Für einen Konvertierungsoperator erforderlich, es sei denn, Sie geben Narrowing an. Gibt an, dass die Operatorprozedur eine Widening-Konvertierung definiert. Siehe "Erweiterungs- und Eingrenzungskonvertierungen" auf dieser Hilfeseite.

  • Narrowing
    Für einen Konvertierungsoperator erforderlich, es sei denn, Sie geben Widening an. Gibt an, dass die Operatorprozedur eine Narrowing-Konvertierung definiert. Siehe "Erweiterungs- und Eingrenzungskonvertierungen" auf dieser Hilfeseite.

  • operatorsymbol
    Erforderlich. Das Symbol oder der Bezeichner des Operators, das bzw. der diese Operatorprozedur definiert.

  • operand1
    Erforderlich. Der Name und Typ des einzigen Operanden eines unären Operators (einschließlich eines Konvertierungsoperators) oder des linken Operanden eines binären Operators.

  • operand2
    Für binäre Operatoren erforderlich. Der Name und Typ des rechten Operanden eines binären Operators.

    operand1 und operand2 weisen folgende Syntax und Bestandteile auf:

    [ ByVal ] operandname [ As operandtype ]

    Bestandteil

    Beschreibung

    ByVal

    Optional, doch der Übergabemechanismus muss ByVal sein.

    operandname

    Erforderlich. Name der Variablen, die den Operanden darstellt. Siehe Namen deklarierter Elemente.

    operandtype

    Optional, sofern Option Strict nicht On ist. Datentyp dieses Operanden.

  • type
    Optional, sofern Option Strict nicht On ist. Datentyp des Werts, der von der Operatorprozedur zurückgegeben wird.

  • 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.

  • EndOperator
    Erforderlich. Beendet die Definition dieser Operatorprozedur.

Hinweise

Sie können Operator nur in einer Klasse oder einer Struktur verwenden. Daher kann der Deklarationskontext für einen Operator keine Quelldatei, kein Namespace, kein Modul, keine Schnittstelle, keine Prozedur und kein Block sein. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Alle Konvertierungen müssen Public Shared sein. Sie können für beide Operanden nicht ByRef, Optional oder ParamArray angeben.

Sie können das Operatorsymbol oder den Operatorbezeichner nicht zum Speichern eines Rückgabewerts verwenden. Sie müssen die Return-Anweisung verwenden, in der ein Wert angegeben werden muss. In der Prozedur können beliebig viele Return-Anweisungen an beliebiger Stelle vorkommen.

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 werden die Operatoren aufgelistet, die Sie definieren können.

Typ

Operatoren

Unär

+, -, IsFalse, IsTrue, Not

Binär

+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor

Konvertierung (unär)

CType

Beachten Sie, dass der =-Operator in der Liste binärer Operatoren der Vergleichsoperator und nicht der Zuweisungsoperator ist.

Wenn Sie CType definieren, müssen Sie entweder Widening oder Narrowing angeben.

Zueinander passende Paare

Sie müssen bestimmte Operatoren als zueinander passende Paare definieren. Wenn Sie den einen Operator eines solchen Paars definieren, müssen Sie den anderen ebenso definieren. Die zueinander passenden Paare lauten wie folgt:

  • = und <>

  • > und <

  • >= und <=

  • IsTrue und IsFalse

Datentypeinschränkungen

Jeder Operator, den Sie definieren, muss die Klasse oder die Struktur umfassen, für die Sie ihn definieren. Dies bedeutet, dass die Klasse oder Struktur als Datentyp eines der folgenden Elemente angegeben werden muss:

  • Des Operanden eines unären Operators

  • Mindestens eines Operanden eines binären Operators

  • Entweder des Operanden oder des Rückgabetyps eines Konvertierungsoperators

Für bestimmte Operatoren gelten zusätzliche Datentypeinschränkungen:

  • Wenn Sie den IsTrue-Operator und den IsFalse-Operator definieren, müssen beide den Boolean-Typ zurückgeben.

  • Wenn Sie den <<-Operator und den >>-Operator definieren, müssen beide für den operandtype von operand2 den Integer-Typ angeben.

Der Rückgabetyp muss nicht dem Typ eines der beiden Operanden entsprechen. Beispielsweise kann ein Vergleichsoperator wie = oder <> den Typ Boolean zurückgeben, auch wenn keiner der Operanden vom Typ Boolean ist.

Logische und bitweise Operatoren

Die Operanden And, Or, Not und Xor können in Visual Basic logische oder bitweise Operationen ausführen. Wenn Sie einen dieser Operatoren für eine Klasse oder Struktur definieren, können Sie jedoch nur dessen bitweise Operation definieren.

Sie können den AndAlso-Operator nicht direkt für eine Operator-Anweisung definieren. Sie können jedoch AndAlso verwenden, wenn Sie die folgenden Bedingungen erfüllt haben:

  • Sie haben And mit den gleichen Operandentypen definiert, die Sie für AndAlso verwenden möchten.

  • Die Definition von And gibt denselben Typ wie die Klasse oder Struktur zurück, in der Sie den Operator definiert haben.

  • Sie haben den IsFalse-Operator in der Klasse oder Struktur definiert, in der Sie And definiert haben.

Ebenso können Sie OrElse verwenden, wenn Sie Or mit denselben Operanden und dem Rückgabetyp der Klasse oder Struktur und für die Klasse oder Struktur IsTrue definiert haben.

Erweiterungs- und Eingrenzungskonvertierungen

Eine erweiternde Konvertierung ist zur Laufzeit immer erfolgreich, während eine einschränkende Konvertierung zur Laufzeit fehlschlagen kann. Weitere Informationen finden Sie unter Erweiternde und eingrenzende Konvertierungen.

Wenn Sie eine Konvertierungsprozedur als Widening deklarieren, darf der Prozedurcode keine Fehler generieren. Dies bedeutet Folgendes:

  • Der Code muss immer einen gültigen Wert vom Typ type zurückgeben.

  • Er muss alle möglichen Ausnahmen und andere Fehlerbedingungen behandeln.

  • Er muss jeden zurückgegebenen Fehler von jeder Prozedur behandeln, die er aufruft.

Wenn die Möglichkeit besteht, dass eine Konvertierungsprozedur fehlschlägt oder eine nicht behandelte Ausnahme verursacht, müssen Sie sie als Narrowing deklarieren.

Beispiel

Im folgenden Codebeispiel wird die Operator-Anweisung verwendet, um die Gliederung einer Struktur zu definieren, die Operatorprozeduren für die Operatoren And, Or, IsFalse und IsTrue enthält. And und Or akzeptieren jeweils zwei Operanden vom Typ abc mit dem Rückgabetyp abc. IsFalse und IsTrue akzeptieren jeweils einen einzigen Operanden vom Typ abc und geben Boolean zurück. Mit diesen Definitionen kann im aufrufenden Code And, AndAlso, Or und OrElse mit Operanden vom Typ abc verwendet werden.

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

Aufgaben

Gewusst wie: Definieren eines Operators

Gewusst wie: Definieren eines Konvertierungsoperators

Gewusst wie: Aufrufen einer Operatorprozedur

Gewusst wie: Verwenden einer Klasse, die Operatoren definiert

Konzepte

Erweiternde und eingrenzende Konvertierungen

Operatorprozeduren

Referenz

IsFalse-Operator

IsTrue-Operator

Widening

Narrowing