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.