Predtým, ako budete pokračovať v implementácii kódu, je dôležité porozumieť konceptom programovania C #. Predtým, ako prejdeme na rozdiely medzi konštantou a readonly, najprv pochopme kľúčové slová a ich použitie v programe. Obidva sú najbežnejšie kľúčové slová používané v programovaní v jazyku C # av podstate na rovnaký účel. Obe kľúčové slová sa však navzájom veľmi líšia. Konštanta je vyhradené slovo, ktoré sa používa na vyjadrenie konštantných hodnôt a určuje, že hodnotu nemožno po kompilácii zmeniť, zatiaľ čo readonly je modifikátor, ktorý sa dá použiť na poliach a ktorého hodnota sa môže počas behu zmeniť. Pozrime sa na niektoré z kľúčových rozdielov medzi konštantou a readonly.
Const predstavuje konštantnú premennú, ktorej hodnota musí byť pri deklarovaní priradená iba raz. Ak sa kľúčové slovo const použije počas deklarácie, stáva sa konštantou, čo znamená, že hodnota zostáva konštantná a nedá sa v priebehu programu zmeniť. Ide skôr o vyhradené slovo, ktoré určuje, že hodnota sa nesmie po kompilácii upravovať. Konštanta je v predvolenom nastavení implicitne statická, takže ju možno zavolať pomocou názvu triedy pomocou „Classname.VariableName“. Konštantné hodnoty sa nazývajú aj literály. Môže to byť akýkoľvek základný dátový typ, ako je celočíselná konštanta, plávajúca konštanta alebo literál reťazca.
Kľúčové slovo Readonly je modifikátor, ktorý sa dá použiť iba na poliach, ale nie na miestnych premenných. Čítacie pole sa môže inicializovať buď v čase deklarovania, alebo vo vnútri konštruktora v rovnakej triede, takže hodnoty sa môžu líšiť pre rôzne spustenia programu v závislosti od použitého konštruktora. Kľúčové slovo iba na čítanie určuje, že premenná inštancie objektu sa nedá modifikovať a akýkoľvek pokus o jeho úpravu po vyhlásení má za následok chybu kompilácie. Premenná sa zmení až po vykonaní. Premenné sa robia iba na to, aby sa kód po neúmyselnej modifikácii zastavil po jeho vytvorení.
Konštantné (konštantné) kľúčové slovo nie je nič iné ako nemenné premenné, ktorých hodnotu je možné inicializovať iba v čase kompilácie. Tieto konštantné hodnoty sa nazývajú aj literály. Jednoducho nám umožňuje určiť, či je premenná modifikovateľná alebo nie. Jednoducho povedané, konštanty sú implicitne statické a mali by byť inicializované pred tým, ako sa majú použiť v programe. Na druhej strane, iba kľúčové slovo na čítanie je modifikátor, ktorý sa dá použiť na poliach a ktorého hodnotu možno zmeniť počas behu programu. Zabraňuje tomu, aby sa polia menili a ktorých hodnoty sa dajú nastaviť pomocou referenčných premenných.
Konštanta je v predvolenom nastavení statická a hodnoty, ktoré by sa mali priradiť v čase deklarácie premennej, čo znamená, že hodnoty sa priraďujú iba v čase kompilácie. Konštanta sa deklaruje pomocou kľúčového slova „const“. Inicializácia konštantného poľa musí byť konštantným výrazom a nesmie sa meniť. Jednoducho povedané, konštanta je konštanta kompilácie. Na druhej strane pole typu readonly sa môže inicializovať iba na úrovni triedy, ktorá nie je vo vnútri metódy, a pole sa po inicializácii nemôže zmeniť. Inými slovami, premenné na čítanie môžu byť inicializované v čase deklarovania alebo vo vnútri konštruktora.
Hodnota const sa vloží priamo do kódu, pretože slúži ako náhrada za kompiláciu. Kompilátor umiestni konštantnú hodnotu do metaúdajov zostavy, ktorá definuje konštantu a vloží hodnotu do samotného kódu IL po inicializácii, takže nie je potrebná žiadna pamäť pre konštanty v runtime na pridelenie. Hodnota iba na čítanie nie je konštantná a je uložená v halde zavádzača, ktorej pamäť nie je možné prideliť, kým nie je načítaný jej typ. Čítacie polia sú uložené v dynamickej pamäti, takže hodnoty je možné získať iba za behu.
Hoci sa obe kľúčové slová používajú takmer na rovnaký účel, majú odlišnú sémantiku binárnych verzií. Keď výraz odkazuje na konštantu, kompilátor vloží hodnotu v čase kompilácie. Ak je hodnota použitá v inej zostave, je potrebné aktualizovať pôvodnú zostavu a hodnotu zmeniť. Zmeny v zostave sa neodzrkadlia, kým sa neprekompilujú. Hodnota sa nezíska, kým za behu, keď výraz odkazuje na čítacie pole. Ak sa hodnota zmení v inej zostave, zmeny sa prejavia v zostave ihneď po jej načítaní bez toho, aby ste ju museli prekompilovať.
Obidve kľúčové slová sa používajú na to isté, čo je deklarovanie člena, aby hodnoty nemohli byť v priebehu programu zmenené. Kľúčové slovo const sa však veľmi líši od kľúčového slova iba na čítanie. Konštanta je konštantná premenná, ktorej hodnota by sa mala inicializovať v čase kompilácie, zatiaľ čo pole readonly sa môže inicializovať iba na úrovni triedy, buď v čase deklarácie alebo vo vnútri konštruktora. Const je kompilačná časová konštanta, zatiaľ čo polia určené len na čítanie sú určené len na čítanie. K premenným konštancie je možné pristupovať pomocou „Classname.VariableName“, zatiaľ čo k premenným typu readonly je možné pristupovať pomocou „InstanceName.VariableName“. Okrem toho konštantné premenné sa dajú deklarovať v metódach, zatiaľ čo v metódach sa nedajú deklarovať polia iba na čítanie.