V tej vadnici bomo spoznali prednost operaterja in asociativnost v C #. To nam bo dalo predstavo o tem, kako prevajalnik C # ocenjuje izraz.
Prednost operaterja C #
Prednost operaterja je niz pravil, ki določa, kako se izraz ocenjuje. V C # ima vsak operater C # dodeljeno prioriteto in na podlagi teh prioritet se izraz izračuna.
Na primer , prednost (*)operatorja množenja je večja kot prednost (+)operaterja seštevanja . Zato se pred množenjem izvede postopek množenja.
Oglejte si spodnjo izjavo.
int x = 4 + 3 * 5;
Kakšna bo vrednost x po izvedbi tega stavka?
Operand 3je povezan z +in *. Kot smo že omenili, ima množenje večjo prednost kot seštevanje. Torej, operacija 3 * 5se izvede namesto 4 + 3. Vrednost spremenljivke x bo 19.
Če bi seštevanje imelo večjo prednost, 4 + 3bi bilo najprej ovrednoteno in vrednost x bi bila 35.
Tabela prednosti operaterja
Čim večja je prednost operatorja, tem večji je v tabeli
Prednost operaterja C #| Kategorija | Operaterji | 
|---|---|
| Postfix Povečanje in zmanjševanje | ++, - | 
| Predpona Povečanje, Zmanjšanje in Unarno | ++, -, +, -,!, ~ | 
| Multiplikativni | *, /,% | 
| Dodatek | +, - | 
| Shift | <> | 
| Relacijski | <,,> = | 
| Enakost | ==,! = | 
| Bitovno AND | & | 
| Bitno XOR | ^ | 
| Bitovno ALI | | | 
| Logično IN | && | 
| Logično ALI | || | 
| Ternarni | ? : | 
| Dodelitev | =, + =, - =, * =, / =,% =, & =, | =, =, <> = | 
Operatorji dodelitve imajo najnižjo prednost, medtem ko imajo operaterji povečanja in zmanjšanja postfix najvišjo prednost.
Primer 1: Prednost operaterja
 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int result1; int a = 5, b = 6, c = 4; result1 = --a * b - ++c; Console.WriteLine(result1); bool result2; result2 = b>= c + a; Console.WriteLine(result2); ) ) ) 
Ko zaženemo program, bo rezultat:
19 Neresnično
Razumejmo, kako se izraz ocenjuje v programu.
Prednost --in ++je večja od *, in prednost *je večja od -. Od tod izjava,
rezultat1 = --a * b - ++ c;
je enakovredno
rezultat1 = ((--a) * b) - (++ c);
Izraz v oklepajih se vedno najprej oceni, ne glede na prednost operaterjev zunaj njega.
- Sprva se ovrednoti (--a), kar ima za posledico 4. 
- Nato se ovrednoti (++ c), kar ima za posledico 5. 
- Zdaj se ovrednoti (a * b), kar ima za posledico 24. 
- Na koncu se izvede odštevanje, ki ima za posledico 19. 
- Zato bo končna vrednost rezultata1 19.
V naslednjem izrazu je prednost +višja od >=. Torej se najprej dodata c in a, vsota pa se primerja z b, da nastane false.
Združenje operaterjev v C #
V prejšnjem poglavju smo razpravljali o prednosti operaterja. Če uporabimo dva operaterja z različno prednostjo, se najprej oceni operater z višjo prednostjo.
Kaj pa, če imata oba operaterja enako prednost?
V takem primeru se izraz izračuna na podlagi asociativnosti operaterja (od leve proti desni ali od desne proti levi).
Na primer:
int a = 5, b = 6, c = 3; int rezultat = a * b / c;
Tu imata oba prednost *in /enako prednost. Ker pa je asociativnost teh operatorjev od leve proti desni , a * bse najprej oceni in nato izvede delitev. Končni rezultat tega izraza bo 10.
V tem konkretnem primeru asociativnost v resnici ni pomembna. Kajti tudi če bi deljenje izvedli pred množenjem, to ne bi vplivalo na rezultat.
Oglejmo si še en primer.
int a = 5, b = 6, c = 3; a = b = c;
Asociativnost =operaterja je od desne proti levi . Torej je vrednost c (tj. 3) Dodeljena b, nato pa je vrednost b dodeljena a. Po izvedbi te izjave bodo vrednosti a, b in c 3.
Spodnja tabela prikazuje asociativnost operaterjev C #:
C # Asociativnost operaterjev| Kategorija | Operaterji | Asociativnost | 
|---|---|---|
| Postfix Povečanje in zmanjševanje | ++, - | Od leve proti desni | 
| Predpona Povečanje, Zmanjšanje in Unarno | ++, -, +, -,!, ~ | Desno na levo | 
| Multiplikativni | *, /,% | Od leve proti desni | 
| Dodatek | +, - | Od leve proti desni | 
| Shift | <> | Od leve proti desni | 
| Relacijski | <,,> = | Od leve proti desni | 
| Enakost | ==,! = | Od leve proti desni | 
| Bitovno AND | & | Od leve proti desni | 
| Bitno XOR | ^ | Od leve proti desni | 
| Bitovno ALI | | | Od leve proti desni | 
| Logično IN | && | Od leve proti desni | 
| Logično ALI | || | Od leve proti desni | 
| Ternarni | ? : | Desno na levo | 
| Dodelitev | =, + =, - =, * =, / =,% =, & =, | =, =, <> = | Desno na levo | 
Skoraj vsi operaterji imajo asociativnost od leve proti desni. Operatorji, ki imajo asociativnost od desne proti levi, so:
- Unarni operaterji
- Operatorji povečanja in zmanjšanja predpone
- Ternarni operater
- Operatorji dodelitve
Primer 2: Asociativnost operaterjev
 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int a = 5, b = 6, c = 3; int result = a * b / c; Console.WriteLine(result); a = b = c; Console.WriteLine("a = (0), b = (1), c = (2)", a, b, c); ) ) ) 
Ko zaženemo program, bo rezultat:
10 a = 3, b = 3, c = 3








