C#-Operatoren

C# bietet viele Operatoren, bei denen es sich um Symbole handelt, die angeben, welche Operationen (Mathematik, Indizierung, Funktionsaufruf usw.) in einem Ausdruck ausgeführt werden. Sie können viele Operatoren überladen, um ihre Bedeutung zu ändern, wenn sie auf einen benutzerdefinierten Typ angewendet werden.

Operationen mit Ganzzahltypen (wie ==, !=, <, >, &, |) sind grundsätzlich auch für Aufzählungstypen (enum) zulässig.

Die Abschnitte listen die C#-Operatoren auf, und zwar von der höchsten zur niedrigsten Rangfolge. Die Operatoren in jedem Abschnitt verwenden die gleiche Rangfolgenebene.

Primäre Operatoren

Hierbei handelt es sich um die höchsten Rangfolgenoperatoren. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

x.y – Memberzugriff.

x?.y – nullbedingter Memberzugriff. Gibt null zurück, wenn der linke Operand null ist.

x?[y] – nullbedingter Indexzugriff. Gibt null zurück, wenn der linke Operand null ist.

f(x) – Funktionsaufruf.

a[x] – Aggregatobjektindizierung.

x++ – Postfixinkrement. Gibt den Wert von x zurück und aktualisiert dann den Speicherort mit dem Wert von x, der eins größer ist (für gewöhnlich wird die Ganzzahl 1 addiert).

x-- – Postfixdekrement. Gibt den Wert von x zurück und aktualisiert dann den Speicherort mit dem Wert von x, der eins kleiner ist (für gewöhnlich wird die Ganzzahl 1 subtrahiert).

new – Typinstanziierung.

typeof – Gibt das den Operanden repräsentierende Objekt „System.Type“ zurück.

checked – Aktiviert die Überlaufprüfung für Ganzzahloperationen.

unchecked – Deaktiviert die Überlaufprüfung für Ganzzahloperationen. Dies ist das Standardverhalten für den Compiler.

default(T) – Gibt den standardmäßigen initialisierten Wert des Typs T zurück, null für Referenztypen, 0 für numerische Werte sowie mit 0/null aufgefüllte Member für Strukturtypen.

delegate – Deklariert eine Delegatinstanz und gibt sie zurück.

sizeof – Gibt die Größe des Typoperanden in Byte zurück.

-> – Mit Memberzugriff kombinierte Zeigerdereferenzierung.

Unäre Operatoren

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

+x – Gibt den Wert von x zurück.

-x – Numerische Negation.

!x – Logische Negation.

~x – Bitweises Komplement.

++x – Präfixinkrement. Gibt den Wert von x nach dem Aktualisieren des Speicherorts mit dem Wert von x zurück, der eins größer ist (für gewöhnlich wird die Ganzzahl 1 addiert).

--x – Präfixdekrement. Gibt den Wert von x nach dem Aktualisieren des Speicherorts mit dem Wert von x zurück, der eins kleiner ist (für gewöhnlich wird die Ganzzahl 1 addiert).

(T)x – Typumwandlung.

await – Wartet auf Task.

&x – Adresse von.

*x – Dereferenzierung.

Multiplikative Operatoren

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

x * y – Multiplikation.

x / y – Division. Wenn es sich bei den Operanden um Ganzzahlen handelt, ist das Ergebnis eine Ganzzahl, die in Richtung 0 abgeschnitten wird (beispielsweise -7 / 2 is -3).

x % y – Restwert. Wenn es sich bei den Operanden um Ganzzahlen handelt, wird dadurch der Rest der Division x durch y zurückgegeben. Wenn q = x / y und r = x % y, dann x = q * y + r.

Additive Operatoren

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

x + y – Addition.

x – y – Subtraktion.

Schiebeoperatoren

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

x << y – Verschiebt Bits nach links und füllt sie mit Null auf der rechten Seite auf.

x >> y – Verschiebt Bits nach rechts. Wenn der linke Operand int oder long ist, werden die linken Bits mit dem Vorzeichenbit gefüllt. Wenn der linke Operand uint oder ulong ist, werden die linken Bits mit Null gefüllt.

Relationale und Typtestoperatoren

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

x < y – Kleiner als (wahr, wenn x kleiner als y ist).

x > y – Größer als (wahr, wenn x größer als y ist).

x <= y – Ist kleiner oder gleich.

x >= y – Ist größer gleich.

is – Typkompatibilität. Gibt TRUE zurück, wenn der ausgewertete linke Operand in den im rechten Operanden (ein statischer Typ) angegebenen Typ umgewandelt werden kann.

as – Typkonvertierung. Gibt die Umwandlung des linken Operanden zum durch den rechten Operanden (ein statischer Typ) angegebenen Typ zurück, as gibt jedoch null zurück, wobei (T)x eine Auslösung ausgeben würde.

Gleichheitsoperatoren

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

x == y – Gleichheit. Standardmäßig wird für Verweistypen, die nicht string entsprechen, diese Verweisübereinstimmung (Identitätstest) zurückgeben Typen können == jedoch überladen. Wenn Sie also vorhaben, die Identität zu testen, sollten Sie möglichst die ReferenceEquals-Methode für object verwenden.

x != y – ungleich. Siehe hierzu den Kommentar für ==. Wenn ein Typ == überlädt, muss er != überladen.

Logischer AND-Operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.

x & y – logisches oder bitweises AND. Die Verwendung mit Ganzzahltypen und enum ist im Allgemeinen zulässig.

Logischer XOR-Operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.

x ^ y – logisches oder bitweises XOR. Sie können dies im Allgemeinen mit Ganzzahltypen und enum-Typen verwenden.

Logischer OR-Operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.

x | y – logisches oder bitweises OR. Die Verwendung mit Ganzzahltypen und enum ist im Allgemeinen zulässig.

Bedingter AND-Operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.

x && y – logisches AND. Wenn der erste Operand FALSE ist, wertet C# den zweiten Operand nicht aus.

Bedingter OR-Operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.

x || y – Logisches OR. Wenn der erste Operand TRUE ist, wertet C# den zweiten Operand nicht aus.

Nullzusammensetzungsoperator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.

x ?? y – Gibt x zurück, sofern es Nicht-null ist; ansonsten wird y zurückgegeben.

Bedingter Operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.

t ? x : y – Wenn der Test t wahr ist, wird x zurückgegeben und ausgewertet, ansonsten wird y zurückgegeben und ausgewertet.

Zuweisung- und Lambdaoperatoren

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.

x = y – Zuweisung.

x += y – Inkrement. Fügen Sie dem Wert x den Wert y hinzu. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück. Wenn x ein event festlegt, muss y eine entsprechende Funktion sein, die C# als ein Eventhandler hinzufügt.

x -= y – Dekrement. Subtrahieren Sie vom Wert x den Wert y. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück. Wenn x ein event festlegt, muss y eine entsprechende Funktion sein, die C# als ein Eventhandler entfernt.

x *= y – Multiplikationszuweisung. Multiplizieren Sie den Wert y mit dem Wert x. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.

x /= y – Divisionszuweisung. Dividieren Sie den Wert x durch den Wert y. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.

x %= y – Restwertzuweisung. Dividieren Sie den Wert x durch den Wert y. Speichern Sie den Rest in x, und geben Sie den neuen Wert zurück.

x &= y – AND-Zuweisung. Führen Sie eine AND-Operation der Werte y und x aus. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.

x |= y – OR-Zuweisung. Führen Sie eine OR-Operation der Werte y und x aus. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.

x ^= y – XOR-Zuweisung. Führen Sie eine XOR-Operation der Werte y und x aus. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.

x <<= y – Linksschiebezuweisung. Verschieben Sie den Wert von x nach links um y Stellen. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.

x >>= y – Rechtsschiebezuweisung. Verschieben Sie den Wert von x nach rechts um y Stellen. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.

=> – Lambdadeklaration.

Arithmetischer Überlauf

Die arithmetischen Operatoren (+, -, *, /) können Ergebnisse erzeugen, die sich außerhalb des zulässigen Wertebereichs für den betreffenden numerischen Typ befinden. Einzelheiten zu bestimmten Operatoren finden Sie im entsprechenden Abschnitt, grundsätzlich gilt aber:

  • Arithmetischer Überlauf bei ganzen Zahlen löst entweder eine OverflowException aus oder verwirft die höchstwertigen Bits des Ergebnisses. Division ganzer Zahlen durch Null löst immer eine DivideByZeroException aus.

    Wenn ein Überlauf bei ganzen Zahlen auftritt, hängen die Auswirkungen vom Ausführungskontext ab, bei dem es sich um checked oder unchecked handeln kann. In einem "checked"-Kontext wird eine OverflowException ausgelöst. In einem "unchecked"-Kontext werden die höchstwertigen Bits verworfen, und die Ausführung wird fortgesetzt. Bei C# haben Sie die Wahl, einen Überlauf zu verarbeiten oder zu ignorieren. Standardmäßig erscheinen arithmetische Operationen in einem unchecked-Kontext.

    Neben arithmetischen Operationen können auch Konvertierungen zwischen ganzzahligen Typen (z.B. die Umwandlung von long nach int) einen Überlauf verursachen. Sie sind von der Ausführung „checked“ oder „unchecked“ abhängig. Bitweise Operatoren und Schiebeoperatoren verursachen allerdings nie einen Überlauf.

  • Arithmetischer Überlauf oder Division durch 0 (null) löst bei Gleitkommazahlen nie eine Ausnahme aus, weil die Gleitkommatypen auf IEEE 754 basieren und daher Vorkehrungen für die Darstellung von Unendlich und NaN (Not a Number/Keine Zahl) aufweisen.

  • Arithmetischer Überlauf bei Decimal löst immer eine OverflowException aus. Dezimale Division durch Null löst immer eine DivideByZeroException aus.

Siehe auch

C#-Referenz
C#-Programmierhandbuch
C#
Überladbare Operatoren
C#-Schlüsselwörter