Freigeben über


Operatorüberladungen

Operatorüberladungen ermöglichen das Kombinieren und Vergleichen von Typen mit Operatoren, z. B. "+", "-", "=" und "!=". Durch das Hinzufügen von Operatorüberladungen zu einem Typ können Entwickler den Typ wie einen integrierten primitiven Typ verwenden. Operatoren sollten nur überladen werden, wenn die Operation dem Typ entspricht (z. B., um das Hinzufügen zweier Instanzen eines Typs zu unterstützen, der einen numerischen Wert darstellt). Operatoren sollten nicht verwendet werden, um eine syntaktische Vereinfachung nicht verwandter Operationen bereitzustellen.

Im folgenden Beispiel wird die Signatur für die Additionsoperation der DateTime-Klasse veranschaulicht.

[Visual Basic]

Public Shared Function op_Addition(ByVal d As DateTime, _
ByVal t As TimeSpan _
) As DateTime

[C#]

public static DateTime op_Addition(
DateTime d, 
TimeSpan t
);

Definieren Sie Operatorüberladungen nur für Typen, die wie primitive (integrierte) Typen ausgeführt werden sollen.

Definieren Sie Operatorüberladungen in einem Typ, der wie ein primitiver Typ ausgeführt werden soll.

Beispielsweise definiert String den Operator == und den Operator! =.

Definieren Sie Operatorüberladungen in Strukturen, die Zahlen (z. B. System.Decimal) darstellen.

Definieren Sie keine ausgeklügelten Operatorüberladungen. Die Operatorüberladung empfiehlt sich in Fällen, in denen das Ergebnis der Operation sofort offensichtlich ist. Beispielsweise ist es sinnvoll, ein System.DateTime-Objekt von einem anderen System.DateTime-Objekt subtrahieren zu können und ein System.TimeSpan-Objekt zu erhalten. Hingegen ist es nicht sinnvoll, mit dem logischen Operator "union" die Vereinigung zweier Datenbankabfragen zu erstellen oder mithilfe des Schiebeoperators in einen Stream zu schreiben.

Stellen Sie Operatorüberladungen nur bereit, wenn mindestens einer der Operanden den Typ aufweist, der die Überladung definiert.

Der C#-Compiler erzwingt diese Richtlinie.

Überladen Sie Operatoren symmetrisch.

Wenn Sie beispielsweise den Gleichheitsoperator überladen, sollten Sie auch den Ungleichheitsoperator überladen. Wenn Sie den Operator "Kleiner als" überladen, überladen Sie auch den Operator "Größer als".

Stellen Sie Methoden mit angezeigten Namen bereit, die jeweils den überladenen Operatoren entsprechen.

Die Einhaltung dieser Richtlinie ist für die CLS-Kompatibilität erforderlich. In der folgenden Tabelle werden die Operatorsymbole mit den entsprechenden alternativen Methoden und den Operatornamen aufgelistet.

C#-Operatorsymbol

Name der alternativen Methode

Name des Operators

Nicht definiert

ToXxx oder FromXxx

op_Implicit

Nicht definiert

ToXxx oder FromXxx

op_Explicit

+ (binär)

add

op_Addition

- (binär)

Subtract

op_Subtraction

* (binär)

Multiplizieren

op_Multiply

/

Divide

op_Division

%

Mod

op_Modulus

^

Xor

op_ExclusiveOr

& (binär)

BitwiseAnd

op_BitwiseAnd

|

BitwiseOr

op_BitwiseOr

&&

And

op_LogicalAnd

||

Oder

op_LogicalOr

=

Assign

op_Assign

<<

LeftShift

op_LeftShift

>>

RightShift

op_RightShift

Nicht definiert

LeftShift

op_SignedRightShift

Nicht definiert

RightShift

op_UnsignedRightShift

==

Equals

op_Equality

>

CompareTo

op_GreaterThan

<

CompareTo

op_LessThan

!=

Equals

op_Inequality

>=

CompareTo

op_GreaterThanOrEqual

<=

CompareTo

op_LessThanOrEqual

*=

Multiplizieren

op_MultiplicationAssignment

-=

Subtract

op_SubtractionAssignment

^=

Xor

op_ExclusiveOrAssignment

<<=

LeftShift

op_LeftShiftAssignment

%=

Mod

op_ModulusAssignment

+=

add

op_AdditionAssignment

&=

BitwiseAnd

op_BitwiseAndAssignment

|=

BitwiseOr

op_BitwiseOrAssignment

,

Komma

op_Comma

/=

Divide

op_DivisionAssignment

--

Decrement

op_Decrement

++

Increment

op_Increment

- (unär)

Negate

op_UnaryNegation

+ (unär)

Plus

op_UnaryPlus

~

OnesComplement

op_OnesComplement

Copyright für einzelne Teile 2005 Microsoft Corporation. Alle Rechte vorbehalten.

Copyright für einzelne Teile Addison-Wesley Corporation. Alle Rechte vorbehalten.

Weitere Informationen zu Entwurfsrichtlinien finden Sie unter „Framework-Entwurfs-Richtlinien: Idiome, Konventionen und Muster für wiederverwendbare .NET-Bibliotheken von Krzysztof Cwalina“ book und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.

Siehe auch

Weitere Ressourcen

Entwurfsrichtlinien für Member

Entwurfsrichtlinien zum Entwickeln von Klassenbibliotheken