Operator StatementOperator Statement

Deklariert das Operatorsymbol, Operanden und Code, der eine Operatorprozedur für eine Klasse oder Struktur definieren.Declares the operator symbol, operands, and code that define an operator procedure on a class or structure.

SyntaxSyntax

[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]   
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]  
    [ statements ]  
    [ statements ]  
    Return returnvalue  
    [ statements ]  
End Operator  

TeileParts

attrlist
Dies ist optional.Optional. Finden Sie unter Liste.See Attribute List.

Public
Erforderlich.Required. Gibt an, dass die Operatorprozedur öffentliche Zugriff.Indicates that this operator procedure has Public access.

Overloads
Dies ist optional.Optional. Finden Sie unter Überladungen.See Overloads.

Shared
Erforderlich.Required. Gibt an, dass die Operatorprozedur eine Shared Verfahren.Indicates that this operator procedure is a Shared procedure.

Shadows
Dies ist optional.Optional. Finden Sie unter Shadows.See Shadows.

Widening
Für einen Konvertierungsoperator erforderlich, es sei denn, Sie geben Narrowing.Required for a conversion operator unless you specify Narrowing. Gibt an, dass die Operatorprozedur definiert eine Widening Konvertierung.Indicates that this operator procedure defines a Widening conversion. Finden Sie unter "Erweiterungskonvertierungen und einschränkende Konvertierungen", auf dieser Hilfeseite.See "Widening and Narrowing Conversions" on this Help page.

Narrowing
Für einen Konvertierungsoperator erforderlich, es sei denn, Sie geben Widening.Required for a conversion operator unless you specify Widening. Gibt an, dass die Operatorprozedur definiert eine Narrowing Konvertierung.Indicates that this operator procedure defines a Narrowing conversion. Finden Sie unter "Erweiterungskonvertierungen und einschränkende Konvertierungen", auf dieser Hilfeseite.See "Widening and Narrowing Conversions" on this Help page.

operatorsymbol
Erforderlich.Required. Das Symbol oder die ID des Operators, der die Operatorprozedur definiert.The symbol or identifier of the operator that this operator procedure defines.

operand1
Erforderlich.Required. Der Name und Typ der einzigen Operanden eines unären Operators (einschließlich eines Konvertierungsoperators) oder der linke Operand eines binären Operators.The name and type of the single operand of a unary operator (including a conversion operator) or the left operand of a binary operator.

operand2
Für binäre Operatoren erforderlich sind.Required for binary operators. Der Name und Typ des rechten Operanden eines binären Operators.The name and type of the right operand of a binary operator.

operand1 und operand2 haben die folgende Syntax und Bestandteile:operand1 and operand2 have the following syntax and parts:

[ ByVal ] operandname [ As operandtype ]

SegmentPart BeschreibungDescription
ByVal Optional, doch dem Übergabemechanismus muss ByVal.Optional, but the passing mechanism must be ByVal.
operandname Erforderlich.Required. Name der Variablen, die diesen Operanden darstellt.Name of the variable representing this operand. Finden Sie unter deklarierte Elementnamen.See Declared Element Names.
operandtype Optional, wenn Option Strict ist On.Optional unless Option Strict is On. Der Datentyp dieses Operanden.Data type of this operand.

type
Optional, wenn Option Strict ist On.Optional unless Option Strict is On. Datentyp des Werts die Operatorprozedur gibt.Data type of the value the operator procedure returns.

statements
Dies ist optional.Optional. Der Block von Anweisungen, die sich die Operatorprozedur ausgeführt wird.Block of statements that the operator procedure runs.

returnvalue
Erforderlich.Required. Der Wert, den die Operatorprozedur an den aufrufenden Code zurückgibt.The value that the operator procedure returns to the calling code.

End OperatorEnd Operator
Erforderlich.Required. Beendet die Definition die Operatorprozedur an.Terminates the definition of this operator procedure.

HinweiseRemarks

Sie können Operator nur in einer Klasse oder Struktur.You can use Operator only in a class or structure. Dies bedeutet, dass die Deklarationskontext ein Operator kann nicht aus einer Quelldatei, Namespace, Modul, Schnittstelle, Prozedur oder Block sein.This means the declaration context for an operator cannot be a source file, namespace, module, interface, procedure, or block. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.For more information, see Declaration Contexts and Default Access Levels.

Alle Operatoren muss Public Shared.All operators must be Public Shared. Sie können keine angeben ByRef, Optional, oder ParamArray für beide Operanden.You cannot specify ByRef, Optional, or ParamArray for either operand.

Sie können nicht das Symbol "Operator" oder einen Bezeichner verwenden, zum Speichern eines Werts zurück.You cannot use the operator symbol or identifier to hold a return value. Verwenden Sie die Return -Anweisung, und sie müssen einen Wert angeben.You must use the Return statement, and it must specify a value. Eine beliebige Anzahl von Return Anweisungen können an beliebiger Stelle in der Prozedur.Any number of Return statements can appear anywhere in the procedure.

Definieren einen Operator auf diese Weise wird aufgerufen, operatorüberladung, unabhängig davon, ob Sie verwenden die Overloads Schlüsselwort.Defining an operator in this way is called operator overloading, whether or not you use the Overloads keyword. In der folgenden Tabelle sind die Operatoren aufgelistet, die Sie definieren können.The following table lists the operators you can define.

TypType OperatorenOperators
UnärUnary +, -, IsFalse, IsTrue, Not+, -, IsFalse, IsTrue, Not
BinärBinary +, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor
Konvertierung (unär)Conversion (unary) CType

Beachten Sie, dass die = Operator in der binären Liste wird der Vergleichsoperator, der nicht der Zuweisungsoperator.Note that the = operator in the binary list is the comparison operator, not the assignment operator.

Beim Definieren von CType, geben Sie Widening oder Narrowing.When you define CType, you must specify either Widening or Narrowing.

Passende PaareMatched Pairs

Sie müssen bestimmte Operatoren als zueinander passende Paare definieren.You must define certain operators as matched pairs. Wenn Sie einen Operator eines solch ein paar definieren, müssen Sie die andere ebenfalls definieren.If you define either operator of such a pair, you must define the other as well. Die übereinstimmende Paare lauten wie folgt:The matched pairs are the following:

  • = und <>= and <>

  • > und <> and <

  • >= und <=>= and <=

  • IsTrue und IsFalseIsTrue and IsFalse

DatentypeinschränkungenData Type Restrictions

Die Klasse oder Struktur, auf dem Sie sie definieren, muss jeder Operator, die Sie definieren umfassen.Every operator you define must involve the class or structure on which you define it. Dies bedeutet, dass die Klasse oder Struktur mit dem Datentyp der folgenden angezeigt werden muss:This means that the class or structure must appear as the data type of the following:

  • Der Operand eines unären Operators.The operand of a unary operator.

  • Mindestens einer der Operanden des binären Operators.At least one of the operands of a binary operator.

  • Der Operand oder der Rückgabetyp eines Konvertierungsoperators.Either the operand or the return type of a conversion operator.

Bestimmte Operatoren haben zusätzliche Daten, die Einschränkungen, geben Sie wie folgt:Certain operators have additional data type restrictions, as follows:

  • Wenn Sie definieren die IsTrue und IsFalse Operatoren müssen beide Zurückgeben der Boolean Typ.If you define the IsTrue and IsFalse operators, they must both return the Boolean type.

  • Wenn Sie definieren die << und >> Operatoren müssen beide angeben der Integer Geben Sie für die operandtype von operand2.If you define the << and >> operators, they must both specify the Integer type for the operandtype of operand2.

Der Rückgabetyp muss nicht in den Typ der Operanden entsprechen.The return type does not have to correspond to the type of either operand. Angenommen, ein Vergleichsoperator z. B. = oder <> können zurückgeben Boolean auch, wenn keiner der Operanden ist Boolean.For example, a comparison operator such as = or <> can return Boolean even if neither operand is Boolean.

Logische und bitweise OperatorenLogical and Bitwise Operators

Die And, Or, Not, und Xor Operatoren können logische oder bitweise Operationen in Visual Basic durchführen.The And, Or, Not, and Xor operators can perform either logical or bitwise operations in Visual Basic. Wenn Sie einen der folgenden Operatoren in einer Klasse oder Struktur definieren, können Sie jedoch nur die bitweise Operation definieren.However, if you define one of these operators on a class or structure, you can define only its bitwise operation.

Keine definieren die AndAlso Operator direkt mit einem Operator Anweisung.You cannot define the AndAlso operator directly with an Operator statement. Sie können jedoch AndAlso , wenn Sie die folgenden Bedingungen erfüllt haben:However, you can use AndAlso if you have fulfilled the following conditions:

  • Sie definiert haben And auf den gleichen Operandentypen, die Sie für die verwenden möchten AndAlso.You have defined And on the same operand types you want to use for AndAlso.

  • Die Definition der And gibt denselben Typ wie die Klasse oder Struktur, auf dem Sie es definiert haben.Your definition of And returns the same type as the class or structure on which you have defined it.

  • Sie definiert haben die IsFalse Operator für die Klasse oder Struktur, auf dem Sie definiert haben And.You have defined the IsFalse operator on the class or structure on which you have defined And.

Auf ähnliche Weise können Sie OrElse , wenn Sie definiert haben Or auf die gleichen Operanden, mit dem Rückgabetyp von der Klasse oder Struktur, und Sie haben definiert IsTrue für die Klasse oder Struktur.Similarly, you can use OrElse if you have defined Or on the same operands, with the return type of the class or structure, and you have defined IsTrue on the class or structure.

Widening and Narrowing ConversionsWidening and Narrowing Conversions

Ein eine erweiternde Konvertierung immer erfolgreich, zur Laufzeit, während eine einschränkende Konvertierung zur Laufzeit Fehler verursachen können.A widening conversion always succeeds at run time, while a narrowing conversion can fail at run time. Weitere Informationen finden Sie unter Widening and Narrowing Conversions.For more information, see Widening and Narrowing Conversions.

Wenn Sie eine Konvertierungsprozedur deklarieren Widening, Ihren Prozedurcode muss keine Fehler generieren.If you declare a conversion procedure to be Widening, your procedure code must not generate any failures. Dies bedeutet Folgendes:This means the following:

  • Sie muss immer einen gültigen Wert des Typs zurückgeben type.It must always return a valid value of type type.

  • Sie müssen alle möglichen Ausnahmen und andere Fehler behandeln.It must handle all possible exceptions and other error conditions.

  • Sie müssen jeden zurückgegebenen Fehler aus allen Prozeduren behandeln, die er aufruft.It must handle any error returns from any procedures it calls.

Wenn eine Möglichkeit besteht, die eine Konvertierungsprozedur nicht erfolgreich ausgeführt werden kann, oder die It dazu führen, eine nicht behandelte Ausnahme dass kann, müssen Sie es deklarieren Narrowing.If there is any possibility that a conversion procedure might not succeed, or that it might cause an unhandled exception, you must declare it to be Narrowing.

BeispielExample

Im folgenden Codebeispiel wird die Operator Anweisung, um das Gerüst für eine Struktur definieren, die Operatorprozeduren für umfasst die And, Or, IsFalse, und IsTrue Operatoren.The following code example uses the Operator statement to define the outline of a structure that includes operator procedures for the And, Or, IsFalse, and IsTrue operators. And und Or akzeptieren jeweils zwei Operanden vom Typ abc und den Rückgabetyp abc.And and Or each take two operands of type abc and return type abc. IsFalse und IsTrue akzeptieren jeweils einen einzelnen Operanden vom Typ abc und zurückgeben Boolean.IsFalse and IsTrue each take a single operand of type abc and return Boolean. Diese Definitionen ermöglicht werden, den aufrufenden Code mit And, AndAlso, Or, und OrElse mit Operanden vom Typ abc.These definitions allow the calling code to use And, AndAlso, Or, and OrElse with operands of type 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 auchSee Also

IsFalse-OperatorIsFalse Operator
IsTrue-OperatorIsTrue Operator
WideningWidening
NarrowingNarrowing
Erweiternde und eingrenzende KonvertierungenWidening and Narrowing Conversions
OperatorprozedurenOperator Procedures
Gewusst wie: Definieren eines OperatorsHow to: Define an Operator
Gewusst wie: Definieren eines KonvertierungsoperatorsHow to: Define a Conversion Operator
Gewusst wie: Aufrufen einer OperatorprozedurHow to: Call an Operator Procedure
Gewusst wie: Verwenden einer Klasse, die Operatoren definiertHow to: Use a Class that Defines Operators