Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A C# számos operátort biztosít. A beépített típusok számos operátort támogatnak, így alapműveleteket hajthat végre az ilyen típusú értékekkel.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
Ezek az operátorok a következő csoportokat tartalmazzák:
- Numerikus operandusokkal aritmetikai műveleteket végző aritmetikai operátorok
- Numerikus operandusokat összehasonlító összehasonlító operátorok
-
Logikai operátorok, amelyek logikai műveleteket hajtanak végre operandusokkal
bool - Bitenkénti és shift operátorok , amelyek bitenkénti vagy műszakos műveleteket végeznek az integráltípusok operandusaival
- Egyenlőségi operátorok , amelyek ellenőrzik, hogy az operandusaik egyenlőek-e vagy sem
Ezek az operátorok általában túlterhelhetők . Egy operátor túlterhelésével megadhatja a felhasználó által megadott típusú operandusok operátori viselkedését.
A legegyszerűbb C#-kifejezések a literálok (például egész számok és valós számok) és a változók nevei. Operátorok használatával összetett kifejezésekké egyesítheti őket. Az operátorok elsőbbsége és az asszociativitás határozza meg a kifejezések műveleteinek sorrendjét. Zárójelek használatával módosíthatja az operátorok elsőbbsége és az asszociativitás által előírt kiértékelési sorrendet.
A következő kódban a hozzárendelések jobb oldalán jelennek meg kifejezések:
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];
List<int> numbers = [..collection];
b = numbers.FindLast(n => n > 1);
A kifejezések általában eredményt adnak, és egy másik kifejezésben is szerepelhetnek. A void metódushívás egy olyan kifejezés példája, amely nem hoz létre eredményt. Csak utasításként használható, ahogy az alábbi példa is mutatja:
Console.WriteLine("Hello, world!");
Íme néhány más kifejezés, amelyet a C# biztosít:
Interpolált sztringkifejezések , amelyek kényelmes szintaxist biztosítanak formázott sztringek létrehozásához:
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.Lambda-kifejezések , amelyek lehetővé teszik névtelen függvények létrehozását:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25Olyan lekérdezési kifejezések , amelyek lehetővé teszik a lekérdezési képességek közvetlen használatát a C#-ban:
int[] scores = { 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
A kifejezés törzsdefiníciója segítségével tömör definíciót adhat meg egy metódushoz, konstruktorhoz, tulajdonsághoz, indexelőhöz vagy véglegesítőhöz.
Operátorok elsőbbsége
A több operátort tartalmazó kifejezésekben a nagyobb elsőbbséget élvező operátorok kiértékelése az alacsonyabb elsőbbséget élvező operátorok előtt történik. A következő példában először a szorzást hajtja végre a rendszer, mert nagyobb elsőbbséget élvez, mint az összeadás:
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
Zárójelek használatával módosíthatja az operátorok elsőbbsége által előírt kiértékelési sorrendet:
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
Az alábbi táblázat a C#-operátorokat sorolja fel, amelyek a legmagasabb prioritással és a legalacsonyabb előzményekkel kezdődnek. Az egyes sorokban lévő operátorok azonos elsőbbséget élveznek.
| Működtetők | Kategória vagy név |
|---|---|
x.y, f(x), a[i], x?.y, xx?[y]++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> |
Primary |
| +x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false | Unary |
| x..y | Tartomány |
| kapcsolóval, |
switch és with kifejezések |
| x * y, x / y, x % y | Többtényezős |
| x + y, x – y | Adalékanyag |
| x << y, x >> y, x >>> y | Műszak |
| x < y, x > y, x <= y, x >= y, is, as | Relációs és típustesztelés |
| x == y, x != y | Egyenlőség |
x & y |
Logikai ÉS vagy bitenkénti logikai ÉS |
x ^ y |
Logikai XOR vagy bitenkénti logikai XOR |
x | y |
Logikai vagybitenkénti logikai VAGY |
| x &&; y | Feltételes ÉS |
| x || Y | Feltételes vagy |
| X?? y | Null-szénerősítési operátor |
| C? t : f | Feltételes operátor |
| 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, x ?? = y, => | Hozzárendelés és lambda deklaráció |
A logikai minta-kombinátorok elsőbbségével kapcsolatos információkért tekintse meg a Minták cikk logikai minták ellenőrzésének elsőbbségi és ellenőrzési sorrendjét ismertető szakaszát.
Operátor-asszociativity
Ha az operátorok elsőbbsége azonos, az operátorok asszociativitása határozza meg a műveletek végrehajtásának sorrendjét:
-
A bal asszociatív operátorok kiértékelése balról jobbra haladva történik. A hozzárendelési operátorok és a null-szenesítő operátorok kivételével minden bináris operátor bal asszociatív. Például a
a + b - ckiértékelés(a + b) - ca következőképpen történik: . -
A jobb asszociatív operátorok kiértékelése jobbról balra haladva történik. A hozzárendelési operátorok, a null-szenesítő operátorok, a lambdas és a feltételes operátorok
?:jobb asszociatívak. Például ax = y = zkiértékelésx = (y = z)a következőképpen történik: .
Fontos
Az űrlap P?.A0?.A1kifejezésében – ha P igen null– egyik sem A0A1 lesz kiértékelve. Hasonlóképpen, az űrlap P?.A0.A1kifejezésében, mivel A0 a kiértékelése P nem null, és nem is az A0.A1. További részletekért tekintse meg a C#-nyelv specifikációját .
Zárójelek használatával módosíthatja az operátor-asszociativity által előírt kiértékelési sorrendet:
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
Operandus értékelése
Az operátorok elsőbbségétől és az asszociativitástól független kifejezés operandusait balról jobbra értékeli a rendszer. Az alábbi példák az operátorok és operandusok kiértékelésének sorrendjét mutatják be:
| Expression | Kiértékelési sorrend |
|---|---|
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, * |
Általában az összes operátoroperndus kiértékelése történik. Egyes operátorok azonban feltételesen értékelik ki az operandusokat. Ez a feltétel azt jelenti, hogy az ilyen operátor bal szélső operandusának értéke határozza meg, hogy más operandusokat kell-e (vagy melyiket) értékelni. Ezek az operátorok a feltételes logikai ÉS (&&) és OR (||) operátorok, a null-szenesítő operátorok??, ??=a null-feltételes operátorok és ?[]a feltételes operátorok ?.?:. További információkért tekintse meg az egyes operátorok leírását.
C# nyelvspecifikáció
További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál: