C#Operatory (C# odwołanie)C# operators (C# reference)

C#udostępnia wiele operatorów obsługiwanych przez typy wbudowane.C# provides a number of operators supported by the built-in types. Na przykład Operatory arytmetyczne wykonują operacje arytmetyczne przy użyciu liczbowych argumentów operacji, a Operatory logiczne Boolean wykonują operacje logiczne przy użyciu operandów bool .For example, arithmetic operators perform arithmetic operations with numeric operands and Boolean logical operators perform logical operations with the bool operands. Niektóre operatory mogą być przeciążone.Certain operators can be overloaded. Dzięki przeciążeniu operatora można określić zachowanie operatora dla argumentów operacji typu zdefiniowanego przez użytkownika.With operator overloading, you can specify the operator behavior for the operands of a user-defined type.

W wyrażeniupierwszeństwo operatorów i łączność określają kolejność wykonywania operacji.In an expression, operator precedence and associativity determine the order in which the operations are performed. Możesz użyć nawiasów, aby zmienić kolejność oceny nałożona przez pierwszeństwo operatorów i łączność.You can use parentheses to change the order of evaluation imposed by operator precedence and associativity.

Pierwszeństwo operatorówOperator precedence

W wyrażeniu zawierającym wiele operatorów operatory o wyższym priorytecie są oceniane przed operatorami o niższym priorytecie.In an expression with multiple operators, the operators with higher precedence are evaluated before the operators with lower precedence. W poniższym przykładzie mnożenie jest wykonywane jako pierwsze, ponieważ ma wyższy priorytet niż dodanie:In the following example, the multiplication is performed first because it has higher precedence than addition:

var a = 2 + 2 * 2;
Console.WriteLine(a); //  output: 6

Użyj nawiasów, aby zmienić kolejność oceny nałożona przez pierwszeństwo operatorów:Use parentheses to change the order of evaluation imposed by operator precedence:

var a = (2 + 2) * 2;
Console.WriteLine(a); //  output: 8

Poniższa tabela zawiera listę C# operatorów zaczynających się od najwyższego pierwszeństwa.The following table lists the C# operators starting with the highest precedence to the lowest. Operatory w każdym wierszu mają takie samo pierwszeństwo.The operators within each row have the same precedence.

OperatoryOperators Kategoria lub nazwaCategory or name
x. y, x?. y, x? [ y], f (x), a[], x + +, x--, New, typeof, Checked, unchecked, default, nameof, Delegate, sizeof, stackalloc, x-> yx.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->y PodstawowyPrimary
+ x, -x, !x, ~ x, + + x, --x, ^ x, (T) x, await, & x, * x, true i false+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false JednostkUnary
x.. tx..y ZakresRange
x * y, x/y, x% yx * y, x / y, x % y MnożeniowyMultiplicative
x + y, x – yx + y, x – y DanaAdditive
x< y ,< x > > yx << y, x >> y ShiftShift
x< y, x > y, x <= y, x > = y, is, asx < y, x > y, x <= y, x >= y, is, as Relacyjne i testy typuRelational and type-testing
x = = y, x! = yx == y, x != y RównośćEquality
x & y Koniunkcja logiczna logicznej i koniunkcji logicznejBoolean logical AND or bitwise logical AND
x ^ y Logiczna logiczna XOR lub KONIUNKCJa logiczna XORBoolean logical XOR or bitwise logical XOR
x | y Logiczna logiczne or lub bitowe logiczne lubBoolean logical OR or bitwise logical OR
x & & yx && y AND warunkoweConditional AND
x | | yx || y OR warunkoweConditional OR
x? tx ?? y Operator łączenia wartości nullNull-coalescing operator
s? t: fc ? t : f Operator warunkowyConditional operator
x = y, x + = y, x-= y, x * = y, x/= y, x% = y, x & = y, x |= y, x ^ = y, x < < = y, x > > = y, x?? = y,=>x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, => Przypisanie i Deklaracja lambdaAssignment and lambda declaration

Łączność operatoraOperator associativity

Gdy operatory mają takie samo pierwszeństwo, łączność operatorów określa kolejność wykonywania operacji:When operators have the same precedence, associativity of the operators determines the order in which the operations are performed:

  • Operatory kojarzenia w lewo są oceniane w kolejności od lewej do prawej.Left-associative operators are evaluated in order from left to right. Z wyjątkiem operatorów przypisania i operatora ??łączenia wartości null wszystkie operatory binarne są z lewej strony skojarzenia.Except for the assignment operators and the null-coalescing operator ??, all binary operators are left-associative. Na przykład, a + b - c jest oceniane jako (a + b) - c.For example, a + b - c is evaluated as (a + b) - c.
  • Operatory kojarzenia w prawo są oceniane w kolejności od prawej do lewej.Right-associative operators are evaluated in order from right to left. Operatory przypisania, operator ??łączenia wartości null i operator ?: warunkowy są z prawej strony skojarzenia.The assignment operators, the null-coalescing operator ??, and the conditional operator ?: are right-associative. Na przykład, x = y = z jest oceniane jako x = (y = z).For example, x = y = z is evaluated as x = (y = z).

Użyj nawiasów, aby zmienić kolejność oceny nałożona przez operator łączność:Use parentheses to change the order of evaluation imposed by operator associativity:

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // output: a = 1, b = 6

Obliczanie operanduOperand evaluation

Niepowiązane z pierwszeństwem operatora i łączność, operandy w wyrażeniu są oceniane od lewej do prawej.Unrelated to operator precedence and associativity, operands in an expression are evaluated from left to right. W poniższych przykładach pokazano kolejność, w której są oceniane operatory i operandy:The following examples demonstrate the order in which operators and operands are evaluated:

WyrażenieExpression Kolejność obliczeńOrder 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, *

Zazwyczaj są oceniane wszystkie operandy operatora.Typically, all operator operands are evaluated. Niektóre operatory jednocześnie szacują operandy.Some operators evaluate operands conditionally. Oznacza to, że wartość pierwszego operandu takiego operatora definiuje, czy należy ocenić inne operandy.That is, the value of the first operand of such an operator defines if (or which) other operands should be evaluated. Operatory te są operatorami logicznymi i&& () i lub||() , ??operatorem łączenia wartości null , operatorami ?. warunkowymi null i ?[] i operator?:warunkowy .These operators are the conditional logical AND (&&) and OR (||) operators, the null-coalescing operator ??, the null-conditional operators ?. and ?[], and the conditional operator ?:. Aby uzyskać więcej informacji, zobacz opis każdego operatora.See the description of each operator for more details.

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz sekcję operatorów C# specyfikacji języka.For more information, see the Operators section of the C# language specification.

Zobacz takżeSee also