Operatory i wyrażenia języka C# (odwołanie w języku C#)

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:

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 skojarzenie określają kolejność wykonywania operacji w wyrażeniu. Nawiasy umożliwiają zmianę kolejności oceny nałożonej przez pierwszeństwo operatora i skojarzenie.

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];

var numbers = new List<int>(new[] { 1, 2, 3 });
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 to przykład wyrażenia, które nie generuje wyniku. Można go użyć 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:
    // 25
    
  • Wyrażenia zapytań , które umożliwiają korzystanie z funkcji zapytań bezpośrednio w języku 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
    

Możesz użyć definicji treści wyrażenia , aby podać zwięzłą definicję metody, konstruktora, właściwości, indeksatora lub finalizatora.

Pierwszeństwo operatorów

W wyrażeniu z wieloma operatorami operatory o wyższym pierwszeństwie są oceniane przed operatorami o niższym pierwszeństwie. W poniższym przykładzie mnożenie jest wykonywane najpierw, ponieważ ma wyższy pierwszeństwo 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ższej. Operatory w każdym wierszu mają ten sam pierwszeństwo.

Operatory Kategoria lub nazwa
x.y, f(x), a[i], , xx?[y]++, x?.yx--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> Podstawowe
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await&, x, *x, true i false Jednoargumentowy
x..y Zakres
przełącznikz switchwyrażenia i with
x * y, x / y, x % y Mnożenie
x + y, x – y Dodawanie
x << y, x >> y Przesunięcia
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 bitowo logiczne AND
x ^ y Logiczne XOR logiczne lub logiczne XOR bitowe
x | y Logiczne OR lub bitowe logiczne OR
x && y AND warunkowe
x || Y OR warunkowe
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, => Przypisanie i deklaracja lambda

Skojarzenie operatora

Gdy operatory mają ten 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 - c wartość jest obliczana jako (a + b) - c.
  • Operatory kojarzenia od prawej do lewej są oceniane w kolejności od prawej do lewej. Operatory przypisania, operatory łączenia wartości null, lambdas i operator ?:warunkowy są właściwe. Na przykład x = y = z wartość jest obliczana jako x = (y = z).

Użyj nawiasów, aby zmienić kolejność oceny nałożonej 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 skojarzeniem operandy w wyrażeniu są obliczane 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órzy operatorzy 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#:

Zobacz też