Operatory (Przewodnik programowania w języku C#)
W języku C# operator to element programu stosowany do co najmniej jednego argumentu operacji w wyrażeniu lub instrukcji.Operatory przyjmujące jeden argument operacji, takie jak operator inkrementacji (++) lub new, są nazywane operatorami jednoargumentowymi.Operatory przyjmujące dwa argumenty operacji, takie jak operatory arytmetyczne (+, -, * i /), są nazywane operatorami dwuargumentowymi.Jeden operator — operator warunkowy (?:) — przyjmuje trzy argumenty operacji i jest jedynym operatorem trójargumentowym w języku C#.
Poniższa instrukcja języka C# zawiera jeden operator jednoargumentowy i jeden argument operacji.Operator inkrementacji ++ modyfikuje wartość argumentu operacji y.
y++;
Następująca instrukcja języka C# zawiera dwa operatory dwuargumentowe, z których każdy przyjmuje dwa argumenty operacji.Argumentami operacji operatora przypisania (=) są zmienna typu liczba całkowita y oraz wyrażenie 2 + 3.Wyrażenie 2 + 3 zawiera dodatkowy operator i dwa argumenty operacji, czyli 2 i 3.
y = 2 + 3;
Operatory, obliczenia i pierwszeństwo operatorów
Argument operacji może być prawidłowym wyrażeniem zawierającym kod o dowolnej długości i może składać się z dowolnej liczby podwyrażeń.W wyrażeniu zawierającym wiele operatorów kolejność stosowania operatorów jest ustalana na podstawie pierwszeństwa operatorów, łączności oraz nawiasów.
Każdy operator ma zdefiniowane pierwszeństwo.W wyrażeniu zawierającym wiele operatorów, które mają różne poziomy pierwszeństwa, pierwszeństwo operatorów określa kolejność wykonywania obliczeń tych operatorów.Na przykład następująca instrukcja przypisuje wartość 3 do zmiennej n1.
n1 = 11 - 2 * 4;
Mnożenie jest wykonywane jako pierwsze, ponieważ mnożenie ma pierwszeństwo przed odejmowaniem.
W poniższej tabeli podzielone operatory na kategorie na podstawie typu wykonywanych przez nie operacji.Kolejność kategorii odpowiada pierwszeństwu operatorów.
Operatory podstawowe
Wyrażenie |
Opis |
---|---|
x.y |
Dostęp do elementu członkowskiego |
f(x) |
Wywołanie metody i delegata |
a[x] |
Dostęp do tablicy i indeksatora |
x++ |
Postinkrementacja |
x-- |
Postdekrementacja |
new T(...) |
Utworzenie obiektu i delegata |
new T(...){...} |
Utworzenie obiektu za pomocą inicjatora.Zobacz Inicjatory obiektów i kolekcji (Przewodnik programowania w języku C#). |
new {...} |
Inicjator obiektu anonimowego.Zobacz Typy anonimowe (Przewodnik programowania w języku C#). |
new T[...] |
Utworzenie tablicy.Zobacz Tablice (Przewodnik programowania w języku C#). |
typeof(T) |
Uzyskanie obiektu System.Type dla typu T |
checked(x) |
Obliczenie wyrażenia w kontekście sprawdzanym |
unchecked(x) |
Obliczenie wyrażenia w kontekście niesprawdzanym |
default (T) |
Uzyskanie wartości domyślnej typu T |
delegate {} |
Funkcja anonimowa (metoda anonimowa) |
Operatory jednoargumentowe
Wyrażenie |
Opis |
---|---|
+x |
Tożsamość |
-x |
Negacja |
!x |
Negacja logiczna |
~x |
Negacja bitowa |
++x |
Preinkrementacja |
--x |
Predekrementacja |
(T)x |
Jawna konwersja wartości x na typ T |
Operatory mnożne
Wyrażenie |
Opis |
---|---|
Mnożenie |
|
Dzielenie |
|
Reszta |
Operatory addytywne
Wyrażenie |
Opis |
---|---|
x + y |
Dodawanie, łączenie ciągów, łączenie delegatów |
x - y |
Odejmowanie, usuwanie delegata |
Operatory przesunięcia
Wyrażenie |
Opis |
---|---|
x << y |
Przesunięcie w lewo |
x >> y |
Przesunięcie w prawo |
Operatory relacyjne i operatory typów
Wyrażenie |
Opis |
---|---|
x < y |
Mniejsze niż |
x > y |
Większe niż |
x <= y |
Mniejsze niż lub równe |
x >= y |
Większe niż lub równe |
x is T |
Zwraca wartość true, gdy x jest typu T; w przeciwnym razie zwraca wartość false |
x as T |
Zwraca wartość x jako wartość typu T lub zwraca wartość null, jeśli x nie jest typu T |
Operatory równości
Wyrażenie |
Opis |
---|---|
x == y |
Równa się |
x != y |
Nie równa się |
Operatory logiczne, warunkowe i równe Null
Kategoria |
Wyrażenie |
Opis |
---|---|---|
AND logiczne |
x & y |
Bitowe AND dla wartości całkowitych, logiczne AND dla wartości binarnych |
XOR logiczne |
x ^ y |
Bitowe XOR dla wartości całkowitych, logiczne XOR dla wartości binarnych |
OR logiczne |
x | y |
Bitowe OR dla wartości całkowitych, logiczne OR dla wartości binarnych |
AND warunkowe |
x & & y |
Wartość y jest obliczana tylko wtedy, gdy wartość x jest równa true |
OR warunkowe |
x || y |
Wartość y jest obliczana tylko wtedy, gdy wartość x jest równa false |
Łączenie wartości null |
x ?? y |
Wynikiem jest wartość y, jeśli x ma wartość null; w przeciwnym razie wynikiem jest wartość x |
Warunkowe |
x ?: y : z |
Wynikiem jest wartość y, gdy wartość x jest równa true, lub z, gdy wartość x jest równa false |
Operatory przypisania i anonimowe
Wyrażenie |
Opis |
---|---|
Przypisanie |
|
x op= y |
Przypisanie złożoneSupports these operators: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y |
Funkcja anonimowa (wyrażenie lambda) |
Łączność
Gdy co najmniej dwa operatory w wyrażeniu mają takie samo pierwszeństwo, są obliczane na podstawie łączności.Operatory mające łączność do lewej strony są obliczane w kolejności od lewej do prawej.Na przykład wyrażenie x * y / z jest obliczane jak wyrażenie (x * y) / z.Operatory mające łączność do prawej strony są obliczane w kolejności od prawej do lewej.Na przykład operator przypisania ma łączność do prawej strony.Gdyby tak nie było, poniższy kod powodowałby wystąpienie błędu.
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);
// The following line, which forces left associativity, causes an error.
//(a = b) = c;
Innym przykładem trójargumentowy (?:) jest prawo asocjacyjnej.Większość operatorów binarnych pozostaną asocjacyjnej.
Niezależnie od tego, czy operatory w wyrażeniu mają łączność do lewej strony, czy do prawej, argumenty operacji każdego wyrażenia są obliczane najpierw od lewej strony do prawej.W poniższych przykładach pokazano kolejność obliczania operatorów i argumentów operacji.
Instrukcja |
Kolejność obliczeń |
---|---|
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, +, = |
a = b - c + d |
a, b, c, -, d, +, = |
a += b -= c |
a, b, c, -=, += |
Dodawanie nawiasów
Używając nawiasów, można zmienić kolejność określoną przez pierwszeństwo operatorów oraz łączność.Na przykład normalnie wynikiem wyrażenia 2 + 3 * 2 jest 8, ponieważ operatory mnożne mają pierwszeństwo przed operatorami addytywnymi.Jeśli jednak to wyrażenie zostanie zapisane w postaci (2 + 3) * 2, dodawanie zostanie wykonane przed mnożeniem, a wynik będzie równy 10.W poniższych przykładach pokazano kolejność obliczania w wyrażeniach z nawiasami.Tak jak w poprzednich przykładach argumenty operacji są obliczane przed zastosowaniem operatora.
Instrukcja |
Kolejność obliczeń |
---|---|
a = (b + c) * d |
a, b, c, +, d, *, = |
a = b - (c + d) |
a, b, c, d, +, -, = |
a = (b + c) * (d - e) |
a, b, c, +, d, e, -, *, = |
Przeciążanie operatora
Można zmienić zachowanie operatorów dla niestandardowych klas i struktur.Ten proces jest określany mianem przeciążania operatora.Aby uzyskać więcej informacji, zobacz Operatory z możliwością przeciążenia (Przewodnik programowania w języku C#).
Sekcje pokrewne
Aby uzyskać więcej informacji, zobacz Słowa kluczowe operatora (odwołanie w C#) i Operatory C#.
Zobacz też
Informacje
Instrukcje, wyrażenia i operatory (Przewodnik programowania w języku C#)