Prieš pradėdami įgyvendinti kodą, svarbu suprasti C # programavimo sąvokas. Prieš pereidami prie skirtumų tarp const ir readly, pirmiausia supraskime raktinius žodžius ir kaip jie naudojami programoje. Abu yra labiausiai paplitę raktiniai žodžiai, naudojami programuojant C # ir iš esmės tuo pačiu tikslu. Tačiau abu raktiniai žodžiai labai skiriasi. „Const“ yra rezervuotas žodis, naudojamas atvaizduoti pastovias reikšmes, ir jis nurodo, kad reikšmė negali būti modifikuojama pasibaigus kompiliavimo laikui, tuo tarpu „readonly“ yra modifikatorius, kuris gali būti naudojamas laukuose ir kurio reikšmę galima pakeisti vykdymo metu. Pažvelkime į keletą pagrindinių skirtumų tarp const ir readly.
„Const“ reiškia pastovų kintamąjį, kurio vertę deklaruoti reikia priskirti tik vieną kartą. Kai deklaracijos metu naudojamas raktinis žodis const, jis tampa pastoviu, reikšmė išlieka pastovi ir negali būti pakeista visoje programoje. Tai daugiau rezervuotas žodis, nurodantis, kad vertė negali būti pakeista pasibaigus kompiliavimo laikui. Pagal numatytuosius nustatymus „const“ yra netiesiogiai statiškas, todėl jį galima iškviesti klasės pavadinimu naudojant „Classname.VariableName“. Pastovios reikšmės taip pat vadinamos literomis. Tai gali būti bet koks pagrindinių duomenų tipas, pavyzdžiui, sveikasis skaičius const, kintamasis const arba eilutės pažodis.
„Readonly“ raktinis žodis yra modifikatorius, kuris gali būti naudojamas tik laukuose, bet ne vietiniuose kintamuosiuose. Skaitomas laukas gali būti inicijuotas deklaravimo metu arba toje pačioje klasėje esančio konstruktoriaus viduje, todėl skirtingiems programos vykdymams reikšmės gali skirtis priklausomai nuo naudojamo konstruktoriaus. Tik perskaitytas raktinis žodis nurodo, kad objekto egzemplioriaus kintamasis negali būti modifikuojamas, o bet koks bandymas jį modifikuoti po deklaravimo sukelia kompiliavimo klaidą. Kintamasis nekeičiamas tik po vykdymo. Kintamieji daromi tik skaitymo tikslais, kad kodas būtų netyčia modifikuotas jį sukūrus.
Pastovus (const) raktinis žodis yra ne kas kita, kaip nekintantys kintamieji, kurių reikšmę galima inicijuoti tik kompiliavimo metu. Šios pastovios reikšmės taip pat vadinamos pažodinėmis. Tai tiesiog leidžia mums nurodyti, ar kintamasis yra modifikuojamas, ar ne. Paprastai tariant, konstantos yra netiesiogiai statiškos ir prieš pradedant jas naudoti programoje, jos turėtų būti inicializuotos. Kita vertus, perskaitytas raktinis žodis yra modifikatorius, kuris gali būti naudojamas laukuose ir kurio vertė gali būti pakeista vykdymo metu. Tai neleidžia keisti laukų, kurių reikšmes galima nustatyti naudojant atskaitos kintamuosius.
Pagal nutylėjimą reikšmė yra statinė, o vertės, kurioms turėtų būti priskiriama kintamojo deklaravimo metu, reiškia, kad vertės priskiriamos tik kompiliavimo metu. Konstanta deklaruojama naudojant „const“ raktinį žodį. Pastovaus lauko inicializacija turi būti pastovi išraiška ir negali būti modifikuota. Paprasčiau tariant, const yra sudarymo laiko konstanta. Tačiau tik skaitomas laukas gali būti inicijuotas klasės lygiu, o ne metodo viduje, o lauko negalima modifikuoti po inicializacijos. Kitaip tariant, tik skaitomi kintamieji gali būti inicijuojami deklaravimo metu arba konstruktoriaus viduje.
„Const“ vertė įdedama tiesiai į kodą, nes ji naudojama kaip kompiliavimo laiko pakeitimas. Kompiliatorius įdeda rinkinio metaduomenyse pastovią vertę, apibrėžiančią konstantą ir po inicializacijos įterpiančią vertę į patį IL kodą, todėl paskirstymo vykdymo metu konstantoms nereikia atminties. Tik skaitymo reikšmė nėra pastovi ir ji kaupiamajame kaupiklyje kaupia atmintį, kuriai negalima skirti vietos, kol nebus įkeltas jos tipas. Tik skaitymo laukai saugomi dinaminėje atmintyje, todėl vertes galima gauti tik vykdant.
Nors abu raktiniai žodžiai naudojami beveik tuo pačiu tikslu, jie turi skirtingą dvejetainės versijos semantiką. Kai išraiška nurodo konstantą, kompiliatorius įtraukia vertę kompiliavimo metu. Taigi, jei vertė naudojama kitoje sąrankoje, reikia atnaujinti originalią sąranką ir pakeisti jos vertę. Asamblėjos pakeitimai neatsispindi, kol ji nebus perkompiliuota. Vertė negaunama iki vykdymo laiko, kai išraiška nurodo tik skaitomą lauką. Jei vertė keičiama kitame rinkinyje, pakeitimai atsispindi rinkinyje, kai tik jis įkeliamas, nereikia jo iš naujo kompiliuoti..
Abu raktiniai žodžiai yra naudojami tam pačiam dalykui, kuris reiškia nario deklaravimą, kad reikšmės negali keistis visoje programoje. Tačiau raktinis žodis labai skiriasi nuo tik perskaityto raktinio žodžio. „Const“ yra pastovus kintamasis, kurio vertė turėtų būti inicijuota kompiliavimo metu, tuo tarpu skaitymo lauką galima inicijuoti tik klasės lygiu - deklaravimo metu arba konstruktoriaus viduje. „Const“ yra sudarymo laiko konstanta, o tik skaitomi laukai yra tik skaitomi. Pastovumo rodiklius galima pasiekti naudojant „Classname.VariableName“, o tik skaitymo kintamuosius galima pasiekti naudojant „instanceName.VariableName“. Be to, const kintamieji gali būti deklaruojami metoduose, o tik skaitomi laukai negali būti deklaruojami metoduose.