Operatoren (C#-Programmierhandbuch)
Aktualisiert: Juli 2008
Ein Operator in C# ist ein Term oder ein Symbol, dem ein oder mehrere Ausdrücke bzw. Operanden als Eingabe übergeben werden, und der einen Wert zurückgibt. Operatoren mit einem Operanden, z. B. der Inkrementoperator (++) oder new, werden als unäre Operatoren bezeichnet. Operatoren mit zwei Operanden, z. B. arithmetische Operatoren (+, -, *, /), werden als binäre Operatoren bezeichnet. Der bedingte Operator (?:) verfügt über drei Operanden. Er ist der einzige tertiäre Operator in C#.
Die folgende C#-Anweisung enthält einen einzelnen unären Operator und einen einzigen Operanden. Der Inkrementoperator ++ ändert den Wert des Operanden y:
y++;
Die folgende C#-Anweisung enthält zwei binäre Operatoren mit jeweils zwei Operanden. Die Operanden des Zuweisungsoperators = sind die ganzzahlige Variable y und der Ausdruck 2 + 3. Der Ausdruck 2 + 3 selbst enthält den Additionsoperator und verwendet die ganzzahligen Werte 2 und 3 als Operanden:
y = 2 + 3;
Ein Operand kann ein gültiger Ausdruck beliebiger Größe sein und sich aus einer beliebigen Anzahl anderer Operationen zusammensetzen. Beim Auswerten eines Ausdrucks werden vom Compiler zunächst alle Operanden von links nach rechts ausgewertet. Nachdem alle Operanden ausgewertet wurden, werden die Operatoren in einer bestimmten Reihenfolge ausgewertet, die als Operatorrangfolge bezeichnet wird. In der folgenden Tabelle werden die Operatoren basierend auf dem Typ der Operation, die sie ausführen, in Kategorien unterteilt. Die Kategorien sind entsprechend der Operatorrangfolge aufgelistet.
Primäre Operatoren
Ausdruck |
Beschreibung |
---|---|
x.y |
Memberzugriff |
f(x) |
Aufrufen von Methoden und Delegaten |
a[x] |
Array- und Indexerzugriff |
x++ |
Postinkrement |
x-- |
Postdekrement |
new T(...) |
Objekt- und Delegaterstellung |
new T(...){...} |
Objekterstellung mit Initialisierern. Siehe Objekt- und Auflistungsinitialisierer (C#-Programmierhandbuch). |
new {...} |
Anonymer Objektinitialisierer. Siehe Anonyme Typen (C#-Programmierhandbuch). |
new T[...] |
Arrayerstellung. Siehe Arrays (C#-Programmierhandbuch). |
typeof(T) |
Abrufen des System.Type-Objekts für T |
checked(x) |
Auswerten von Ausdrücken in überprüftem Kontext |
unchecked(x) |
Auswerten von Ausdrücken in nicht überprüftem Kontext |
default (T) |
Abrufen des Standardwerts vom Typ T |
delegate {} |
Anonyme Funktion (anonyme Methode) |
Unäre Operatoren
Ausdruck |
Beschreibung |
---|---|
+x |
Identität |
-x |
Negation |
!x |
Logische Negation |
~x |
Bitweise Negation |
++x |
Präinkrement |
--x |
Prädekrement |
(T)x |
Explizites Konvertieren von x in den Typ T |
Multiplikative Operatoren
Ausdruck |
Beschreibung |
---|---|
Multiplikation |
|
Division |
|
Rest |
Additive Operatoren
Ausdruck |
Beschreibung |
---|---|
x + y |
Addition, Zeichenfolgenverkettung, Delegatkombination |
x - y |
Subtraktion, Delegatentfernung |
Schiebeoperatoren
Ausdruck |
Beschreibung |
---|---|
x << y |
Nach links verschieben |
x >> y |
Nach rechts verschieben |
Relationale Operatoren und Typoperatoren
Ausdruck |
Beschreibung |
---|---|
x < y |
Kleiner als |
x > y |
Größer als |
x <= y |
Kleiner oder gleich |
x >= y |
Größer oder gleich |
x is T |
Gibt true zurück, wenn x gleich T ist, andernfalls false. |
x as T |
Gibt x als T typisiert zurück, oder NULL, wenn x nicht vom Typ T ist. |
Gleichheitsoperatoren
Ausdruck |
Beschreibung |
---|---|
x == y |
Gleich |
x != y |
Ungleich |
Zuweisungsoperatoren und anonyme Operatoren
Ausdruck |
Beschreibung |
---|---|
Zuweisung |
|
x op= y |
Die Verbundzuweisung unterstützt folgende Operatoren: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y |
Anonyme Funktion (Lambda-Ausdruck) |
Logische, bedingte und NULL-Operatoren
Kategorie |
Ausdruck |
Beschreibung |
---|---|---|
Logisches AND |
x & y |
Ganzzahliges bitweises AND, boolesches logisches AND |
Logisches XOR |
x ^ y |
Ganzzahliges bitweises XOR, boolesches logisches XOR |
Logisches OR |
x | y |
Ganzzahliges bitweises OR, boolesches logisches OR |
Bedingtes AND |
x && y |
Wertet y nur aus, wenn x den Wert true hat. |
Bedingtes OR |
x || y |
Wertet y nur aus, wenn x den Wert false hat. |
Null Coalesce |
X ?? y |
Ergibt y, wenn x den Wert NULL hat, andernfalls x |
Bedingt |
x ?: y : z |
Wird zu y ausgewertet, wenn x den Wert "true" hat, und zu z, wenn x den Wert "false" hat. |
Wenn ein Ausdruck zwei Operatoren mit demselben Rang enthält, wird die Auswertungsreihenfolge anhand des Assoziativitätsgesetzes festgelegt. Linksassoziative Operatoren werden von links nach rechts ausgewertet. x * y / z wird beispielsweise als (x * y) / z ausgewertet. Rechtsassoziative Operatoren werden von rechts nach links ausgewertet. Die Zuweisungsoperatoren und der tertiäre Operator (?:) sind rechtsassoziativ. Alle anderen binären Operatoren sind linksassoziativ.
Sie können die Auswertung eines Ausdrucks vor allen anderen Ausdrücken erzwingen, indem Sie den entsprechenden Ausdruck in Klammern einschließen. So ergibt zum Beispiel 2 + 3 * 2 im Normalfall 8, da Multiplikationsoperatoren Vorrang vor Additionsoperatoren haben. Wenn der Ausdruck hingegen in der Form (2 + 3) * 2 notiert wird, ist das Ergebnis 10, da der C#-Compiler angewiesen wird, den Additionsoperator (+) vor dem Multiplikationsoperator (*) auszuwerten.
Sie können das Verhalten der Operatoren für benutzerdefinierte Klassen und Strukturen ändern. Dieser Prozess wird als Operatorüberladung bezeichnet. Weitere Informationen finden Sie unter Überladbare Operatoren (C#-Programmierhandbuch).
Verwandte Abschnitte
Weitere Informationen finden Sie unter Operatorschlüsselwörter (C#-Referenz) und C#-Operatoren.
Siehe auch
Konzepte
Referenz
Anweisungen, Ausdrücke und Operatoren (C#-Programmierhandbuch)
Änderungsprotokoll
Date |
Versionsgeschichte |
Grund |
---|---|---|
Juli 2008 |
Falsche Aussage über nicht definierte Ausgabe entfernt. |
Informationsergänzung. |