Operator StatementOperator Statement

Deklariert das Symbol "Operator", die Operanden und den Code, die 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 Attributliste.See Attribute List.

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

Overloads
Dies ist optional.Optional. Finden Sie unter überlädt.See Overloads.

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

Shadows
Dies ist optional.Optional. Finden Sie unter Schatten.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. Siehe "Erweiternde und eingrenzende Konvertierungen" auf dieser Hilfeseite an.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. Siehe "Erweiternde und eingrenzende Konvertierungen" auf dieser Hilfeseite an.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 einzelnen Operanden aus, der ein unäroperator (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.Required for binary operators. Der Name und Typ des rechten Operanden des 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. Der Name der Variablen, die diesen Operanden darstellt.Name of the variable representing this operand. Finden Sie unter deklarierte Elementnamen.See Declared Element Names.
operandtype Dies ist optional, wenn Option Strict ist On.Optional unless Option Strict is On. Der Datentyp dieses Operanden.Data type of this operand.

type
Dies ist 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 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 dieser 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 für ein Operator darf keine 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 der Bezeichner verwenden, um einen Rückgabewert zu speichern.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 = in der Liste binärer Operator wird der Vergleichsoperator, der nicht der Zuweisungsoperator.Note that the = operator in the binary list is the comparison operator, not the assignment operator.

Wenn Sie definieren 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 den anderen ebenso definieren.If you define either operator of such a pair, you must define the other as well. Die passende 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

Jeder Operator, den Sie definieren muss umfassen, die Klasse oder Struktur, auf dem Sie definieren.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 aufweisen Datentyp, zusätzliche Einschränkungen, 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 ist keine der beiden Operanden entsprechen.The return type does not have to correspond to the type of either operand. Angenommen, ein Vergleichsoperator z. B. = oder <> zurückgeben können 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 in Visual Basic logische oder bitweise Operationen durchführen.The And, Or, Not, and Xor operators can perform either logical or bitwise operations in Visual Basic. Wenn Sie einer dieser Operatoren für eine Klasse oder Struktur definieren, können Sie 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 sind:However, you can use AndAlso if you have fulfilled the following conditions:

  • Sie haben definiert And auf den gleichen Operandentypen, die Sie 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 sie definiert haben.Your definition of And returns the same type as the class or structure on which you have defined it.

  • Sie haben definiert 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 der Klasse oder Struktur, und Sie definiertes 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 erweiternde Konvertierung ist zur Laufzeit immer erfolgreich, während eine einschränkende Konvertierung kann zur Laufzeit fehlschlagen.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, 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.

  • Es muss alle möglichen Ausnahmen und andere fehlerbedingungen behandelt werden.It must handle all possible exceptions and other error conditions.

  • Sie müssen jeden zurückgegebenen Fehler von alle Prozeduren behandeln, die 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 deklarieren, werden 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 mit der Operator Anweisung, um das Gerüst für eine Struktur definieren, die Operatorprozeduren für enthält 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 dem 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