(0) exportieren Drucken
Alle erweitern
3 von 7 fanden dies hilfreich - Dieses Thema bewerten.

Operatoren (C#-Programmierhandbuch)

Ein Operator in C# ist ein Term oder ein Symbol, das einen oder mehrere Ausdrücke, sogenannte Operanden, als Eingabe entgegennimmt und einen Wert zurückgibt. Operatoren mit einem Operanden, z. B. der Inkrement-Operator (++) oder new, werden als unäre Operatoren bezeichnet. Operatoren mit zwei Operanden, z. B. arithmetische Operatoren (+, -, *, /), werden binäre Operatoren genannt. 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 Inkrement-Operator ++ ä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.

Operatoren in einem Ausdruck werden 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är

x.y, f(x), a[x], x++, x--, new, typeof, checked, unchecked

Unär

+, -, !, ~, ++x, --x, (T)x

Arithmetisch – multiplikativ

*, /, %

Arithmetisch – additiv

+, -

Verschiebung

<<, >>

Relational und Typtest

<, >, <=, >=, is, as

Gleichheit

==, !=

Logisch, in Operatorrangfolge

&, ^, |

Bedingt, in Operatorrangfolge

&&, ||, ?:

Zuweisung

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

Wenn ein Ausdruck zwei Operatoren mit demselben Rang enthält, entscheidet die Operatororientierung über die Auswertungsreihenfolge. 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. Im C#-Standard ist jedoch nicht festgelegt, wann der Festlegungsteil einer Inkrementanweisung in einem Ausdruck ausgeführt wird. So generiert der folgende Beispielcode die Ausgabe 6:

int num1 = 5;
num1++;
System.Console.WriteLine(num1);

Die Ausgabe, die von folgendem Beispielcode generiert wird, ist jedoch nicht definiert:

int num2 = 5;
num2 = num2++;  //not recommended
System.Console.WriteLine(num2);

Aus diesem Grund ist ein Vorgehen wie im zweiten Beispiel nicht empfehlenswert. 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 Überladen von Operatoren bezeichnet. Weitere Informationen finden Sie unter Überladbare Operatoren (C#-Programmierhandbuch).

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.