Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Jazyk C# poskytuje řadu operátorů. Mnohé z nich jsou podporovány integrovanými typy a umožňují provádět základní operace s hodnotami těchto typů. Mezi tyto operátory patří následující skupiny:
- Aritmetické operátory , které provádějí aritmetické operace s číselnými operandy
- Relační operátory , které porovnávají číselné operandy
-
Logické operátory , které provádějí logické operace s
booloperandy - Bitové operátory a operátory posunu , které provádějí bitové operace nebo operace posunu s operandy integrálních typů
- Operátory rovnosti , které kontrolují, jestli jsou jejich operandy stejné nebo ne
Obvykle můžete přetížit tyto operátory, tj. určit chování operátoru pro operandy uživatelem definovaného typu.
Nejjednodušší výrazy jazyka C# jsou literály (například celé číslo a reálná čísla) a názvy proměnných. Pomocí operátorů je můžete zkombinovat do složitých výrazů. Priorita operátoru a asociativita určují pořadí, ve kterém se operace ve výrazu provádějí. Pomocí závorek můžete změnit pořadí vyhodnocení uložené podle priority operátoru a asociativity.
V následujícím kódu jsou příklady výrazů na pravé straně přiřazení:
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);
Výraz obvykle vytvoří výsledek a může být zahrnut do jiného výrazu. Volání void metody je příkladem výrazu, který nevygeneruje výsledek. Dá se použít jenom jako příkaz, jak ukazuje následující příklad:
Console.WriteLine("Hello, world!");
Tady jsou některé další druhy výrazů, které jazyk C# poskytuje:
Interpolované řetězcové výrazy , které poskytují pohodlnou syntaxi pro vytváření formátovaných řetězců:
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.Výrazy lambda , které umožňují vytvářet anonymní funkce:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25Výrazy dotazů , které umožňují používat možnosti dotazů přímo v jazyce 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
Definici těla výrazu můžete použít k poskytnutí stručné definice metody, konstruktoru, vlastnosti, indexeru nebo finalizátoru.
Priorita operátorů
Ve výrazu s více operátory se operátory s vyšší prioritou vyhodnocují před operátory s nižší prioritou. V následujícím příkladu se násobení provede jako první, protože má vyšší prioritu než sčítání:
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
Pomocí závorek můžete změnit pořadí vyhodnocení uložené podle priority operátoru:
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
Následující tabulka uvádí operátory jazyka C# začínající nejvyšší prioritou na nejnižší. Operátory v každém řádku mají stejnou prioritu.
| Operátoři | Kategorie nebo název |
|---|---|
x.y, f(x), a[i], x?.y, , x?[y]x++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> |
Primární |
| +x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true a false | Unární |
| x..y | Rozmezí |
| s přepínačems | výrazy switch a with |
| x * y, x / y, x % y | Multiplikativní |
| x + y, x – y | Aditivní |
| x << y, x >> y, x >>> y | Směna |
| x < y, x > y, x <= y, x >= y, is, as | Relační a typové testování |
| x == y, x != y | Rovnost |
x & y |
Logický logický operátor AND nebo bitový logický operátor AND |
x ^ y |
Logický logický XOR nebo bitový logický XOR |
x | y |
Logická logická hodnota OR nebo bitový logický operátor OR |
| x & y | Podmíněný operátor AND |
| x || y | Podmíněné OR |
| x ?? y | Operátor nulového sjednocení |
| c ? t : f | Podmíněný operátor |
| 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, => | Deklarace přiřazení a lambda |
Informace o prioritě kombinátorů logických vzorů naleznete v části Priorita a pořadí kontroly logických vzorů v článku Vzory .
Asociativita operátoru
Pokud mají operátory stejnou prioritu, asociativita operátorů určuje pořadí, ve kterém se operace provádějí:
-
Asociativní operátory zleva doprava se vyhodnocují v pořadí. S výjimkou operátorů přiřazení a operátorů nulového spojování jsou všechny binární operátory asociativní. Například
a + b - cse vyhodnotí jako(a + b) - c. - Operátory asociativní zprava se vyhodnocují v pořadí zprava doleva. Operátory přiřazení, operátory nulového sjednocení, lambda a podmíněný operátor
?:jsou asociativní. Napříkladx = y = zse vyhodnotí jakox = (y = z).
Důležité
Ve výrazu formuláře P?.A0?.A1, pokud P je null, ani A0A1 nejsou vyhodnoceny. Podobně ve výrazu formuláře P?.A0.A1, protože A0 není vyhodnocen, pokud P je null, ani není A0.A1. Další podrobnosti najdete ve specifikaci jazyka C# .
Pomocí závorek změňte pořadí vyhodnocení uložené operátorem asociativity:
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
Vyhodnocení operandu
Nesouvisející s prioritou operátorů a asociativitou se operandy ve výrazu vyhodnocují zleva doprava. Následující příklady ukazují pořadí, ve kterém se vyhodnocují operátory a operandy:
| Výraz | Pořadí vyhodnocování |
|---|---|
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, * |
Obvykle se vyhodnocují všechny operandy operátoru. Některé operátory však vyhodnocují operandy podmíněně. To znamená, že hodnota levého operandu takového operátoru definuje, zda (nebo které) jiné operandy mají být vyhodnoceny. Tyto operátory jsou podmíněné logické operátory AND () a OR (&&||),operátory ?? null-coalescing a ??=, operátory s podmínkou ?. null a ?[]a podmíněný operátor ?:. Další informace najdete v popisu jednotlivých operátorů.
Specifikace jazyka C#
Další informace najdete v následujících částech specifikace jazyka C#:
Viz také
- Přetížení operátoru
- stromy výrazů