Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Język C# udostępnia wiele operatorów. Wiele z nich jest obsługiwanych przez wbudowane typy i umożliwia wykonywanie podstawowych operacji z wartościami tych typów. Te operatory obejmują następujące grupy:
- Operatory arytmetyczne wykonujące operacje arytmetyczne z operandami liczbowymi
- Operatory porównania , które porównują operandy liczbowe
-
Operatory logiczne , które wykonują operacje logiczne z
booloperandami - Operatory bitowe i przesunięcia wykonujące operacje bitowe lub przesunięcia z operandami typów całkowitych
- Operatory równości , które sprawdzają, czy ich operandy są równe, czy nie
Zazwyczaj można przeciążyć te operatory, czyli określić zachowanie operatora dla operandów typu zdefiniowanego przez użytkownika.
Najprostsze wyrażenia języka C# to literały (na przykład liczby całkowite i liczby rzeczywiste ) oraz nazwy zmiennych. Można je połączyć w złożone wyrażenia przy użyciu operatorów. Pierwszeństwo operatora i asocjalność określają kolejność wykonywania operacji w wyrażeniu. Nawiasy umożliwiają zmianę kolejności oceny nałożonej przez pierwszeństwo operatora i kojarzenie.
W poniższym kodzie przykłady wyrażeń znajdują się po prawej stronie przypisań:
int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);
string s = "String literal";
char l = s[s.Length - 1];
List<int> numbers = [..collection];
b = numbers.FindLast(n => n > 1);
Zazwyczaj wyrażenie generuje wynik i może zostać uwzględnione w innym wyrażeniu. Wywołanie void metody jest przykładem wyrażenia, które nie generuje wyniku. Można go używać tylko jako instrukcji, jak pokazano w poniższym przykładzie:
Console.WriteLine("Hello, world!");
Oto kilka innych rodzajów wyrażeń dostępnych w języku C#:
Wyrażenia ciągów interpolowanych , które zapewniają wygodną składnię do tworzenia sformatowanych ciągów:
var r = 2.3; var message = $"The area of a circle with radius {r} is {Math.PI * r * r:F3}."; Console.WriteLine(message); // Output: // The area of a circle with radius 2.3 is 16.619.Wyrażenia lambda , które umożliwiają tworzenie funkcji anonimowych:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25Wyrażenia zapytań , które umożliwiają korzystanie z funkcji zapytań bezpośrednio w języku C#:
int[] scores = { 90, 97, 78, 68, 85 }; IEnumerable<int> highScoresQuery = from score in scores where score > 80 orderby score descending select score; Console.WriteLine(string.Join(" ", highScoresQuery)); // Output: // 97 90 85
Możesz użyć definicji treści wyrażenia , aby podać zwięzłą definicję metody, konstruktora, właściwości, indeksatora lub finalizatora.
Priorytet operatorów
W wyrażeniu z wieloma operatorami operatory o wyższym pierwszeństwie są obliczane przed operatorami o niższym pierwszeństwie. W poniższym przykładzie mnożenie jest wykonywane najpierw, ponieważ ma wyższy priorytet niż dodanie:
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
Użyj nawiasów, aby zmienić kolejność oceny narzuconą przez pierwszeństwo operatora:
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
W poniższej tabeli wymieniono operatory języka C# rozpoczynające się od najwyższego pierwszeństwa do najniższego. Operatory w każdym wierszu mają taki sam pierwszeństwo.
| Operatorów | Kategoria lub nazwa |
|---|---|
x.y, f(x), a[i], x?.y, x?[y]x++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> |
Podstawowy |
| +x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true i false | Jednoargumentowy |
| x..y | Zakres |
| przełącznik, z | wyrażenia switch i with |
| x * y, x / y, x % y | Multiplikatywny |
| x + y, x – y | Dodatek |
| x << y, x >> y, x >>> y | Zmiana |
| x < y, x > y, x <= y, x >= y, is | Testowanie relacyjne i typowe |
| x == y, x != y | Równość |
x & y |
Logiczne i logiczne AND lub bitowe, logiczne AND |
x ^ y |
Logiczne XOR logiczne lub logiczne XOR bitowe |
x | y |
Logiczne OR lub bitowe logiczne OR |
| x &&y | Warunkowe I |
| x || y | Warunkowe LUB |
| x ?? y | Operator łączenia wartości null |
| c ? t : f | Operator warunkowy |
| 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, => | Deklaracja przypisania i lambda |
Aby uzyskać informacje na temat pierwszeństwa kombinatorów wzorców logicznych, zobacz sekcję Pierwszeństwo i kolejność sprawdzania wzorców logicznych w artykule Patterns (Wzorce ).
Kojarzenie operatorów
Gdy operatory mają taki sam pierwszeństwo, skojarzenie operatorów określa kolejność wykonywania operacji:
-
Operatory kojarzące z lewej strony są oceniane w kolejności od lewej do prawej. Z wyjątkiem operatorów przypisania i operatorów łączenia wartości null wszystkie operatory binarne są skojarzone z lewej strony. Na przykład
a + b - cwartość jest obliczana jako(a + b) - c. -
Operatory kojarzące od prawej do lewej są oceniane w kolejności od prawej do lewej. Operatory przypisania, operatory łączenia wartości null, lambdy i operator
?:warunkowy są prawo asocjacyjne. Na przykładx = y = zwartość jest obliczana jakox = (y = z).
Ważne
W wyrażeniu formularza P?.A0?.A1, jeśli P ma nullwartość , ani nie A1A0 są obliczane. Podobnie, w wyrażeniu formularza P?.A0.A1, ponieważ A0 nie jest obliczany, gdy P ma wartość null, ani .A0.A1 Aby uzyskać więcej informacji, zobacz specyfikację języka C# .
Użyj nawiasów, aby zmienić kolejność oceny narzuconą przez skojarzenie operatora:
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
Ocena operandu
Niezwiązane z pierwszeństwem operatora i kojarzeniem operandy w wyrażeniu są oceniane od lewej do prawej. W poniższych przykładach pokazano kolejność oceniania operatorów i operandów:
| Wyrażenie | Kolejność obliczania |
|---|---|
a + b |
a, b, + |
a + b * c |
a, b, c, *, + |
a / b + c * d |
a, b, /, c, d, *, + |
a / (b + c) * d |
a, b, c, +, /, d, * |
Zazwyczaj wszystkie operandy operatorów są oceniane. Jednak niektóre operatory warunkowo oceniają operandy. Oznacza to, że wartość lewego operandu takiego operatora określa, czy (lub które) inne operandy powinny być oceniane. Te operatory to warunkowe operatory logiczne AND () i OR (&&||),operatory ?? łączenia wartości null i operatory warunkowe o wartości null oraz ??=?[]operator warunkowy .?.?: Aby uzyskać więcej informacji, zobacz opis każdego operatora.
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz następujące sekcje specyfikacji języka C#: