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#)

Koncepcje

Przewodnik programowania w języku C#