Operatoren (C#-Programmierhandbuch)Operators (C# Programming Guide)

In C# ist ein Operator ein Programmelement, das auf einen oder mehrere Operanden in einem Ausdruck oder einer Anweisung angewendet wird.In C#, an operator is a program element that is applied to one or more operands in an expression or statement. Operatoren mit einem Operanden, z. B. der Inkrementoperator (++) oder new, werden als unäre Operatoren bezeichnet.Operators that take one operand, such as the increment operator (++) or new, are referred to as unary operators. Operatoren mit zwei Operanden, z. B. arithmetische Operatoren (+,-,*,/), werden als binäre Operatoren bezeichnet.Operators that take two operands, such as arithmetic operators (+,-,*,/), are referred to as binary operators. Der bedingte Operator (?:) verfügt über drei Operanden. Er ist der einzige ternäre Operator in C#.One operator, the conditional operator (?:), takes three operands and is the sole ternary operator in C#.

Die folgende C#-Anweisung enthält einen einzelnen unären Operator und einen einzigen Operanden.The following C# statement contains a single unary operator and a single operand. Der Inkrementoperator ++ändert den Wert des Operanden y.The increment operator, ++, modifies the value of the operand y.

y++;

Die folgende C#-Anweisung enthält zwei binäre Operatoren mit jeweils zwei Operanden.The following C# statement contains two binary operators, each with two operands. Die Operanden des Zuweisungsoperators =sind die ganzzahlige Variable y und der Ausdruck 2 + 3 .The assignment operator, =, has the integer variable y and the expression 2 + 3 as operands. Der Ausdruck 2 + 3 selbst besteht aus dem Additionsoperator und zwei Operanden: 2 und 3.The expression 2 + 3 itself consists of the addition operator and two operands, 2 and 3.

y = 2 + 3;

Operatoren, Evaluierung und OperatorrangfolgeOperators, Evaluation, and Operator Precedence

Ein Operand kann ein gültiger Ausdruck sein, der aus beliebig langem Code zusammengesetzt ist, und kann eine beliebige Anzahl von Unterausdrücken enthalten.An operand can be a valid expression that is composed of any length of code, and it can comprise any number of sub expressions. In einem Ausdruck mit mehreren Operatoren wird die Reihenfolge, in der die Operatoren angewendet werden, von der Operatorrangfolge, der Assoziativitätund von Klammern bestimmt.In an expression that contains multiple operators, the order in which the operators are applied is determined by operator precedence, associativity, and parentheses.

Jeder Operator verfügt über einen definierten Vorrang.Each operator has a defined precedence. In einem Ausdruck, der mehrere Operatoren mit verschiedenen Rangfolgenebenen enthält, bestimmt die Rangfolge der Operatoren die Reihenfolge, in der die Operatoren ausgewertet werden.In an expression that contains multiple operators that have different precedence levels, the precedence of the operators determines the order in which the operators are evaluated. Beispielsweise weist die folgende Anweisung n13 zu.For example, the following statement assigns 3 to n1.

n1 = 11 - 2 * 4;

Die Multiplikation wird zuerst ausgeführt, da Multiplikation Vorrang vor Subtraktion enthält.The multiplication is executed first because multiplication takes precedence over subtraction.

In der folgenden Tabelle werden die Operatoren basierend auf dem Typ der Operation, die sie ausführen, in Kategorien unterteilt.The following table separates the operators into categories based on the type of operation they perform. Die Kategorien sind entsprechend der Rangfolge aufgelistet.The categories are listed in order of precedence.

Primäre OperatorenPrimary Operators

AusdruckExpression BeschreibungDescription
x.yx.y

x?.yx?.y
MemberzugriffMember access

Bedingter MemberzugriffConditional member access
f(x)f(x) Methoden- und DelegataufrufMethod and delegate invocation
a[x]a[x]

a?[x]a?[x]
Array- und IndexerzugriffArray and indexer access

Bedingter Array- und IndexerzugriffConditional array and indexer access
x++x++ PostinkrementPost-increment
x--x-- PostdekrementPost-decrement
new T(...)new T(...) Objekt- und DelegaterstellungObject and delegate creation
new T(...){...}new T(...){...} Objekterstellung mit Initialisierern.Object creation with initializer. Siehe Objekt- und Auflistungsinitialisierer.See Object and Collection Initializers.
new {...}new {...} Anonymer Objektinitialisierer.Anonymous object initializer. Siehe Anonyme Typen.See Anonymous Types.
new T[...]new T[...] Arrayerstellung.Array creation. Siehe Arrays.See Arrays.
typeof(T)typeof(T) Abrufen des System.Type-Objekts für TObtain System.Type object for T
checked(x)checked(x) Auswerten von Ausdrücken in geprüftem KontextEvaluate expression in checked context
unchecked(x)unchecked(x) Auswerten von Ausdrücken in nicht geprüftem KontextEvaluate expression in unchecked context
default (T)default (T) Abrufen des Standardwerts vom Typ TObtain default value of type T
delegate {}delegate {} Anonyme Funktion (anonyme Methode)Anonymous function (anonymous method)

Unäre OperatorenUnary Operators

AusdruckExpression BeschreibungDescription
+x+x IdentityIdentity
-x-x NegationNegation
[!](../../../csharp/language-reference/operators/logical-negation-operator.md)x(../../../csharp/language-reference/operators/logical-negation-operator.md)x Logische NegationLogical negation
~x~x Bitweise NegationBitwise negation
++x++x PräinkrementPre-increment
--x--x PrädekrementPre-decrement
(T)x(T)x Explizites Konvertieren von x in den Typ TExplicitly convert x to type T

Multiplikative OperatorenMultiplicative Operators

AusdruckExpression BeschreibungDescription
* MultiplikationMultiplication
/ DivisionDivision
% RestRemainder

Additive OperatorenAdditive Operators

AusdruckExpression BeschreibungDescription
x + yx + y Addition, Zeichenfolgenverkettung, DelegatkombinationAddition, string concatenation, delegate combination
x - yx - y Subtraktion, DelegatentfernungSubtraction, delegate removal

SchiebeoperatorenShift Operators

AusdruckExpression BeschreibungDescription
x << yx << y LinksverschiebungShift left
x >> yx >> y RechtsverschiebungShift right

Relationale Operatoren und TypoperatorenRelational and Type Operators

AusdruckExpression BeschreibungDescription
x < yx < y Kleiner alsLess than
x > yx > y Größer alsGreater than
x <= yx <= y Kleiner oder gleichLess than or equal
x >= yx >= y Größer oder gleichGreater than or equal
x is Tx is T Gibt true zurück, wenn x gleich T ist, andernfalls false.Return true if x is a T, false otherwise
x as Tx as T Gibt x als T typisiert zurück, oder NULL, wenn x ungleich T ist.Return x typed as T, or null if x is not a T

GleichheitsoperatorenEquality Operators

AusdruckExpression BeschreibungDescription
x == yx == y GleichEqual
x != yx != y UngleichNot equal

Logische, bedingte und NULL-OperatorenLogical, Conditional, and Null Operators

KategorieCategory AusdruckExpression BeschreibungDescription
Logisches ANDLogical AND x & yx & y Ganzzahliges bitweises AND, boolesches logisches ANDInteger bitwise AND, Boolean logical AND
Logisches XORLogical XOR x ^ yx ^ y Ganzzahliges bitweises XOR, boolesches logisches XORInteger bitwise XOR, boolean logical XOR
Logisches ORLogical OR x | yx | y Ganzzahliges bitweises OR, boolesches logisches ORInteger bitwise OR, boolean logical OR
Bedingtes ANDConditional AND x && yx && y Wertet y nur aus, wenn x den Wert true hat.Evaluates y only if x is true
Bedingtes ORConditional OR x || yx || y Wertet y nur aus, wenn x den Wert false hat.Evaluates y only if x is false
NULL-SammeloperatorNull coalescing x ??x ?? yy Ergibt y, wenn x den Wert NULL hat, andernfalls x.Evaluates to y if x is null, to x otherwise
BedingtConditional x ?x ? y : zy : z Wird zu y ausgewertet, wenn x den Wert true hat, und zu z, wenn x den Wert false hat.Evaluates to y if x is true, z if x is false

Zuweisungsoperatoren und anonyme OperatorenAssignment and Anonymous Operators

AusdruckExpression BeschreibungDescription
= ZuweisungAssignment
x op= yx op= y Verbundzuweisung.Compound assignment. Unterstützt diese Operatoren: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>=.Supports these operators: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>=
(T x) => y(T x) => y Anonyme Funktion (Lambda-Ausdruck)Anonymous function (lambda expression)

AssoziativitätAssociativity

Wenn ein Ausdruck zwei oder mehr Operatoren mit demselben Rang enthält, wird die Auswertungsreihenfolge anhand des Assoziativitätsgesetzes festgelegt.When two or more operators that have the same precedence are present in an expression, they are evaluated based on associativity. Linksassoziative Operatoren werden von links nach rechts ausgewertet.Left-associative operators are evaluated in order from left to right. x * y / z wird beispielsweise als (x * y) / zausgewertet.For example, x * y / z is evaluated as (x * y) / z. Rechtsassoziative Operatoren werden von rechts nach links ausgewertet.Right-associative operators are evaluated in order from right to left. Beispielsweise ist der Zuweisungsoperator rechtsassoziativ.For example, the assignment operator is right associative. Falls nicht, würde der folgende Code zu einem Fehler führen.If it were not, the following code would result in an error.

int a, b, c;  
c = 1;  
// The following two lines are equivalent.  
a = b = c;  
a = (b = c);  

// The following line, which forces left associativity, causes an error.  
//(a = b) = c;  

Ein weiteres Beispiel für einen rechtsassoziativen Operator ist der ternäre Operator (?:).As another example the ternary operator (?:) is right associative. Die meisten binäre Operatoren sind linksassoziativ.Most binary operators are left associative.

Unabhängig davon, ob Operatoren in einem Ausdruck linksassoziativ oder rechtsassoziativ sind, werden zuerst die Operanden aller Ausdrücke von links nach rechts ausgewertet.Whether the operators in an expression are left associative or right associative, the operands of each expression are evaluated first, from left to right. Die folgenden Beispiele veranschaulichen die Auswertungsreihenfolge von Operatoren und Operanden.The following examples illustrate the order of evaluation of operators and operands.

AnweisungStatement Reihenfolge der AuswertungOrder of evaluation
a = b a, b, =a, b, =
a = b + c a, b, c, +, =a, b, c, +, =
a = b + c * d a, b, c, d, *, +, =a, b, c, d, *, +, =
a = b * c + d a, b, c, *, d, +, =a, b, c, *, d, +, =
a = b - c + d a, b, c, -, d, +, =a, b, c, -, d, +, =
a += b -= c a, b, c, -=, +=a, b, c, -=, +=

Hinzufügen von KlammernAdding Parentheses

Sie können die Reihenfolge ändern, die von Operatorenrangfolge und Assoziativität festgelegt wird, indem Sie Klammern verwenden.You can change the order imposed by operator precedence and associativity by using parentheses. Beispielsweise wird 2 + 3 * 2 gewöhnlich als 8 ausgewertet, da Multiplikationsoperatoren Vorrang gegenüber additiven Operatoren besitzen.For example, 2 + 3 * 2 ordinarily evaluates to 8, because multiplicative operators take precedence over additive operators. Wenn Sie jedoch den Ausdruck als (2 + 3) * 2schreiben, wird die Addition vor der Multiplikation ausgewertet, und das Ergebnis ist 10.However, if you write the expression as (2 + 3) * 2, the addition is evaluated before the multiplication, and the result is 10. Die folgenden Beispiele veranschaulichen die Auswertungsreihenfolge der in Klammern gesetzten Ausdrücke.The following examples illustrate the order of evaluation in parenthesized expressions. Wie in den vorherigen Beispielen werden die Operanden ausgewertet, bevor der Operator angewendet wird.As in previous examples, the operands are evaluated before the operator is applied.

AnweisungStatement Reihenfolge der AuswertungOrder of evaluation
a = (b + c) * d a, b, c, +, d, *, =a, b, c, +, d, *, =
a = b - (c + d) a, b, c, d, +, -, =a, b, c, d, +, -, =
a = (b + c) * (d - e) a, b, c, +, d, e, -, *, =a, b, c, +, d, e, -, *, =

OperatorüberladungOperator Overloading

Sie können das Verhalten der Operatoren für benutzerdefinierte Klassen und Strukturen ändern.You can change the behavior of operators for custom classes and structs. Dieser Prozess wird als Operatorüberladungbezeichnet.This process is referred to as operator overloading. Weitere Informationen finden Sie unter Überladbare Operatoren.For more information, see Overloadable Operators.

Weitere Informationen finden Sie unter Operatorschlüsselwörter und C#-Operatoren.For more information, see Operator Keywords and C# Operators.

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
Anweisungen, Ausdrücke und OperatorenStatements, Expressions, and Operators