Operatorüberladungen
Aktualisiert: November 2007
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 in einem Typ, der wie ein primitiver Typ ausgeführt werden soll.
Beispielsweise definiert String den Operator == und den Operator! =.
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 Kleiner als-Operator überladen, überladen Sie auch den Größer als-Operator.
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) |
Multiply |
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 |
*= |
Multiply |
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 im Buch "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" von Krzysztof Cwalina und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.