Operatory uporządkowane względem priorytetu:
( ) | grupowanie, np. (x+y) lub wywołania metody, np. f( ) |
. -> | operatory dostępu do składowych (klasy lub struktury). |
[ ] | operator indeksowania (np. tablicy). |
++ -- | operatory post-inkrementacji i -dekrementacji. Operatory pre-inkrementacji i dekrementacji mają trochę niższe priorytety. |
new | pozwala na wywołanie konstruktora i dynamiczne alokowanie nowego obiektu w pamięci. Zwraca referencję do utworzonego obiektu, np. MyClass a = new MyClass( ) ; |
typeof | zwraca typ obiektu, np. System.Type t = typeof( MyClass ); |
! ~ | negacja logicza ( ! ) lub bitowa ( ~ ). |
* | operator de-referencji (zwraca wartość zapisaną w miejscu o podanym adresie). |
& | operator pobrania adresu (razem z operatorem * jest stosowany przy wskaźnikach). |
( ) | operator rzutowania typu, np. (typ) wartość |
* / % | operatory mnożenia, dzielenia oraz reszty z dzielenia (%). |
+ - | operatory dodawania i odejmowania. |
>> << | przesunięcie bitowe w prawo lub w lewo. |
> < >= <= | operatory relacji (większości, mniejszości, ... , mniejsze lub równe). |
is | operator zgodności typów. Np. if( x is int) { ... } |
as | : pozwala rzutować w dół hierarchii klas. Przy niepowodzeniu zwraca null. |
== != | operatory równości i nierówności |
| & ^ | operatory logiczne bitowe. |
|| && | operatory logicznej alternatywy ( || ) oraz koniunkcji ( && ). |
?: | trójargumentowy operator warunku. ( warunek ? a : b ) zwróci a gdy warunek ma wartość true lub b gdy warunek ma wartość false. |
= *= | operatory przypisania. Działanie (a *= b) jest równoważne ( a = a * b ). Podobnie działają inne operatory przypisania: /= += -= %= &= ... |
Gdy operatory mają ten sam priorytet (np. + oraz - ) o ich kolejności decyduje
łączność. Operatory przypisań oraz jednoargumentowe łączą od prawej strony,
natomiast operatory dwuargumentowe (z wyjątkiem przypisań) łączą od lewej, np.
a = b = c
jest równoważne: a = (b = c)
a + b + c
jest równoważne: (a + b) + c
Ponadto istnieją operatory checked i unchecked służące do sprawdzania
przepełnienia, np. int a = checked( b * c ) ;
gdzie b oraz c
są typu int
Operator checked oblicza wyrażenie podczas działania programu i
jeśli jego wartość wychodzi poza dopuszczalny zbiór wartości zwraca wyjątek
OverflowException (domyślnie poprawność jest sprawdzana tylko w momencie
kompilacji). Operatora checked można używać także w stosunku do całego bloku
instrukcji, np. checked { ... ; a = b * c ; ... }
.
Operator unchecked wyłącza natomiast sprawdzanie wyrażeń arytmetycznych
podczas kompilacji (przydaje się bardzo rzadko)