Operátory a výrazy jazyka C# (referenční dokumentace jazyka C#)
Jazyk C# poskytuje řadu operátorů. Mnoho z nich podporuje předdefinované typy a umožňuje 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
bool
operandy - 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 tyto operátory přetížit , 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 kombinovat do komplexních výrazů. Priorita operátoru a asociativita určují pořadí provádění operací ve výrazu. Pomocí závorek můžete změnit pořadí vyhodnocení uloženého 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];
var numbers = new List<int>(new[] { 1, 2, 3 });
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: // 25
Výrazy dotazů , které umožňují používat možnosti dotazů přímo v jazyce C#:
var scores = new[] { 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ého 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átory | 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 | Rozsah |
s přepínačem, s | switch výrazy a with výrazy |
x * y, x / y, x % y | Multiplikativní |
x + y, x – y | Aditivní |
x << y, x >> y | Shift |
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ý operátor OR nebo bitový logický operátor OR |
x && y | Podmiňovací operátor AND |
x || Y | Podmiňovací operátor 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, => | Deklarace přiřazení a lambda |
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 vlevo se vyhodnocují v pořadí zleva doprava. S výjimkou operátorů přiřazení a operátorů s hodnotou null-coalescing jsou všechny binární operátory asociativní. Například
a + b - c
se vyhodnotí jako(a + b) - c
. - Asociativní operátory 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 = z
se vyhodnotí jakox = (y = z)
.
Pomocí závorek můžete změnit 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átoru a asociativitou, operandy ve výrazu se 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, jestli (nebo které) jiné operandy mají být vyhodnoceny. Tyto operátory jsou podmíněné logické operátory AND (&&
) a OR (||
), operátory nulového sjednocení ??
a ??=
operátory ?.
s podmínkou null 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#: