Operatory
sesef
Operator to jeden lub kilka znaków (zazwyczaj nie będących literami), które mają specjalne znaczenie w języku programowania. W C# wyróżniamy następujące operatory:
1 Operatory przypisania
2 Operatory arytmetyczne
3 Operatory relacji
4 Operatory bitowe
5 Operatory logiczna
6 Operator konkatenacji
7 Operatory jednokrotnego zwiększenia i zmniejszenia
8 Operator wyrażenia warunkowego (?:)
9 Operator łączący wartości null (??)
10 Operator dostępu warunkowego (?.)
11 Operator is
12 Operator as
13 Operator new
14 Operator sizeof
15 Operator typeof
16 Operator nameof
Operatory przypisania
Operator przypisania jak sama nazwa wskazuje przypisują jakąś wartość do zmiennej.
Operator | Opis | Przykład | Równoznaczne |
= | Zwykłe przypisanie | zmienna = 1 | |
+= | Dodawanie z przypisaniem | zmienna += 5 | zmienna = zmienna + 5 |
-= | Odejmowanie z przypisaniem | zmienna -= 2 | zmienna = zmienna - 2 |
*= | Mnożenie z przypisaniem | zmienna *= 4 | zmienna = zmienna * 4 |
/= | Dzielenie z przypisaniem | zmienna /= 3 | zmienna = zmienna / 3 |
%= | Reszta z dzielenia z przypisaniem | zmienna %= 5 | zmienna = zmienna % 5 |
&= | Iloczyn bitowy z przypisaniem | zmienna &= true | |
|= | Suma bitowa z przypisaniem | zmienna |= true | |
= | Bitowa różnica symetryczna z przypisaniem | zmienna </sup>= true | |
<<= | Przesunięcie w lewo z przypisaniem | zmienna <= 3 | |
>>= | Przesunięcie w prawo z przypisaniem | zmienna >>= 3 |
Operatory arytmetyczne
Operatory służące do wykonywania prostych działań matematycznych.
Operator | Opis | Przykład |
+ | Dodawanie | 2 + 2 |
- | Odejmowanie | 5 - 2 |
* | Mnożenie | 3 * 5 |
/ | Dzielenie | 20 / 4 |
% | Reszta z dzielenia | 7 % 4 |
Operatory relacji
Operatory służą do porównania dwóch zmiennych i zawsze dają wynik true (prawda) lub false (fałsz).
Operator | Opis | Przykład |
== | Równy | 2 == 2 |
!= | Różny | 5 != 2 |
< | Mniejszy | 3 < 5 |
> | Większy | 20 > 4 |
<= | Mniejszy równy | zmienna <= 1 |
>= | Większy równy | zmienna >= 0 |
Operatory bitowe
Operatory służą do wykonywania operacji na bitach.
Operator | Opis | Przykład |
& | Iloczyn logiczny | 0x05 & 0x06 |
| | Suma logiczna | 0x05 | 0x06 |
~ | Negacja logiczna | ~0x06 |
Logiczna różnica symetryczna | 0x04</sup>0x01 | |
<< | Przesunięcie w lewo | 1 < 2 |
>> | Przesunięcie w prawo | 2 >> 1 |
Operatory logiczna
Operatory służą do łączenia wyrażen relacji.
Operator | Opis | Przykład |
&& | Iloczyn warunków | (zmienna >= 5) && (zmienna <= 10) |
|| | Suma warunków | (zmienna == 1) || (zmienna == 5) |
! | Negacja warunku | !(ZmiennaLogiczna) |
Operator konkatenacji
Operator służy do łączenia łańcuchów.
Operator | Opis | Przykład |
+ | Łączenie łańcuchów | "Ala ma " + "kotka." |
Operatory jednokrotnego zwiększenia i zmniejszenia
Operatowy zwiększają bądź zmiejszają liczbę całkowitą o 1.
Operator | Opis | Przykład |
++ | Zwiększ o 1 | zmienna++, ++zmienna |
-- | Zmniejsz o 1 | zmienna--, --zmienna |
Kiedy operator znajduje się przed zmienna (++zmienna, --zmienna) wartość zmiennej zostanie zwiększona/zmniejszona o jeden, a następnie przekazana do wyrażenia. W wypadku kiedy operator znajduje się za zmienna (zmienna++, zmienna--) wartość zmiennej zostanie przekazana do wyrażenia a następnie zwiększona/zmniejszona o jeden.
Operator wyrażenia warunkowego (?:)
Operator zwraca jedną z dwóch wartości w zależności od wyniku warunku.
Konstrukcja:
warunek ? wyrazenie_w_przypadku_prawdy : wyrazenie_w_przypadku_falszu
Przykład:
int x = 2;
int y = 1;
double z = (x == y) ? x/y : y/x
Operator łączący wartości null (??)
Operator sprawdza czy argument po lewej stronie jest różny od null, jeśli tak zwraca go. W przeciwnym wypadku zwracany jest argument po prawej stronie.
Konstrukcja:
argument zwracany jeśli nie jest nullem ?? argument zwracany jeśli pierwszy argument jest nullem
Przykład:
public void Test()
{
string napis = null ?? "Prawa wartość.";
string napis2 = "Lewa wartość" ?? "Prawa wartość.";
Tuple<int> krotka = Tuple.Create(5) ?? Tuple.Create(6);
Tuple<int> krotka2 = null ?? Tuple.Create(7);
Console.WriteLine(napis);
Console.WriteLine(napis2);
Console.WriteLine(krotka.Item1);
Console.WriteLine(krotka2.Item1);
}
Operator dostępu warunkowego (?.)
Operator ten w przypadku używania referencji do której przypisany jest null nie rzuca wyjątku ArgumentNullException tylko zwraca null.
Porównanie
return obiekt != null ? obiekt.Wlasciwosc : null
// Jest równoznaczne temu
return obiekt?.obiekt.Wlasciwosc
Przykład:
// Wcześniej
public int ZwrocRozmiar(string napis)
{
if (napis != null)
{
return napis.Length;
}
return 0;
}
// Lub
public int ZwrocRozmiar(string napis)
{
return napis != null ? napis.Length : 0;
}
// Obecnie
public int ZwrocRozmiar(string napis)
{
return napis?.Length ?? 0; // Połączenie z operatorem ??
}
Możemy dzięki temu uniknąć drabinek warunków sprawdzających czy w drodze do interesującego nas pola nie natrafimy na null. Operatory te możemy łączyć:
obiekt?.pole1?.pole2?.pole3 // itd
Operator is
Operator Is służy do sprawdzenia czy konwersja miedzy typami może zostać wykonana.
Przykład:
string napis = "Ala ma kota";
object obj = (object)napis;
if (obj is string)
{
string text = (string)obj;
//dalsze dzialania na text
}
od wersji C# 6.0 operator is zostal lekko usprawniony i teraz w przypadku gdy zwraca true, potwierza ze konwersja miedzy typami jest mozliwa, zwraca true oraz od razu konwertuje obiekt na dany typ, przykład:
string napis = "Ala ma kota";
object obj = (object)napis;
if (obj is string text)
{
//można odrazu dzialac na text
}
Operator as
Operator As służy do konwersji między typami danych.
Przykład:
string napis = "Ala ma kota";
object obj = (object)napis;
string s = obj as string;
Operator new
Operator new służy do tworzenia nowych obiektów
Przykład:
Point pt = new Point(0, 0)
Operator sizeof
Operator sizeof zwraca rozmiar obiektu podanego w parametrze w bajtach.
Przykład:
int size = sizeof(long);
Operator typeof
Operator typeof zwraca typ obiektu podanego w parametrze.
Przykład:
System.Type t = typeof(int)
Operator nameof
Operator nameof zwraca nazwę przesłanej zmiennej, metody, typu czy pola klasy jako string.
Przykład:
public void Test()
{
int zmienna = 5;
Console.WriteLine(nameof(zmienna));
Console.WriteLine(nameof(Int32));
Console.WriteLine(nameof(Test));
}
@nowy masz rację, zapewne literówka się wkradła.