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

C#-Programmierhandbuch

Referenz

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

Änderungsprotokoll

Date

Versionsgeschichte

Grund

Juli 2008

Falsche Aussage über nicht definierte Ausgabe entfernt.

Informationsergänzung.