Überladbare Operatoren (C#-Programmierhandbuch)

Aktualisiert: November 2007

In C# können benutzerdefinierte Typen durch Definition statischer Memberfunktionen und durch Verwendung des operator-Schlüsselworts Operatoren überladen. Es können jedoch nicht alle Operatoren überladen werden, und bei anderen bestehen Einschränkungen, wie in der folgenden Tabelle aufgelistet ist:

Operatoren

Überladbarkeit

+, -, !, ~, ++, --, true, false

Diese unären Operatoren können überladen werden.

+, -, *, /, %, &, |, ^, <<, >>

Diese binären Operatoren können überladen werden.

==, !=, <, >, <=, >=

Die Vergleichsoperatoren können überladen werden. (Beachten Sie hierzu aber den Hinweis im Anschluss an diese Tabelle.)

&&, ||

Die bedingten logischen Operatoren können nicht überladen werden. Sie können jedoch mithilfe von & und | ausgewertet werden, die ihrerseits überladen werden können.

[]

Der Arrayindizierungsoperator kann nicht überladen werden, aber es können Indexer definiert werden.

()

Der Typkonvertierungsoperator kann nicht überladen werden, aber es können neue Konvertierungsoperatoren definiert werden (siehe explicit und implicit).

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Zuweisungsoperatoren können nicht überladen werden. Jedoch wird zum Beispiel der Ausdruck += mithilfe des Operators + ausgewertet, der seinerseits überladen werden kann.

=, ., ?:, ->, new, is, sizeof, typeof

Diese Operatoren können nicht überladen werden.

Hinweis:

Wenn Vergleichsoperatoren überladen werden, müssen sie paarweise überladen werden. Dies bedeutet, dass bei einer Überladung von == auch != überladen werden muss. Umgekehrt ist der Fall derselbe, und Entsprechendes gilt auch für < und > bzw. <= und >=.

Wenn Sie in einer benutzerdefinierten Klasse einen Operator überladen möchten, müssen Sie in der Klasse eine Methode mit der richtigen Signatur erstellen. Die Methode muss mit "operator X" benannt werden, wobei X der Name oder das Symbol des Operators ist, der überladen wird. Unäre Operatoren verfügen über einen Parameter, binäre Operatoren verfügen über zwei Parameter. In beiden Fällen muss ein Parameter vom Typ der Klasse oder Struktur sein, die den Operator deklariert, wie im folgenden Beispiel gezeigt:

public static Complex operator +(Complex c1, Complex c2)

Weitere Informationen finden Sie unter Gewusst wie: Verwenden der Operatorüberladung zum Erstellen einer Klasse für komplexe Zahlen (C#-Programmierhandbuch).

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Anweisungen, Ausdrücke und Operatoren (C#-Programmierhandbuch)

Operatoren (C#-Programmierhandbuch)

C#-Operatoren

Weitere Ressourcen

Warum sind überladene Operatoren in C# immer statisch?