Pirms turpināt kodu ieviešanu, ir svarīgi saprast C # programmēšanas jēdzienus. Pirms pāriet uz atšķirībām starp const un readonly, vispirms izprotam atslēgvārdus un to, kā tie tiek izmantoti programmā. Abi ir visizplatītākie atslēgas vārdi, ko izmanto C # programmēšanā, un būtībā vienam un tam pašam mērķim. Tomēr abi atslēgvārdi ir ļoti atšķirīgi viens no otra. Const ir rezervēts vārds, ko izmanto, lai attēlotu nemainīgas vērtības, un tas norāda, ka vērtību nevar mainīt pēc kompilēšanas laika, turpretī readonly ir modifikators, ko var izmantot laukos un kura vērtību var mainīt izpildlaika laikā. Apskatīsim dažas galvenās atšķirības starp const un readonly.
Const attiecas uz nemainīgu mainīgo lielumu, kura vērtība deklarēšanas laikā jāpiešķir tikai vienu reizi. Ja deklarācijas laikā tiek izmantots atslēgvārds const, tas kļūst par nemainīgu nozīmi, jo vērtība paliek nemainīga un to nevar mainīt visā programmā. Tas ir vairāk rezervēts vārds, kas norāda, ka vērtību pēc kompilācijas laika nedrīkst mainīt. Const pēc noklusējuma ir netieši statisks, tāpēc to var izsaukt ar klases nosaukumu, izmantojot “Classname.VariableName”. Pastāvīgās vērtības sauc arī par burtiem. Tas var būt jebkura pamata datu tips, piemēram, vesels skaitlis konst, mainīgs lielums vai burtu burts.
Atslēgvārds Readonly ir pārveidotājs, ko var izmantot tikai laukos, bet ne vietējos mainīgos. Tikai lasāmo lauku var inicializēt deklarēšanas laikā vai konstruktora iekšpusē tajā pašā klasē, tāpēc vērtības dažādiem programmas izpildījumiem var atšķirties atkarībā no izmantotā konstruktora. Tikai lasāmais atslēgvārds norāda, ka objekta gadījuma mainīgais nav modificējams, un jebkurš mēģinājums to modificēt pēc deklarācijas rada kompilācijas kļūdu. Mainīgais nemainās tikai pēc izpildīšanas. Mainīgie tiek izveidoti tikai lasāmi, lai kods netiktu nejauši modificēts pēc tā konstruēšanas.
Pastāvīgais (const) atslēgvārds ir nekas cits kā nemainīgi mainīgie, kuru vērtību var inicializēt tikai kompilēšanas laikā. Šīs nemainīgās vērtības sauc arī par burtiem. Tas vienkārši ļauj mums precizēt, vai mainīgais ir modificējams. Vienkārši izsakoties, konstantes ir netieši statiskas, un pirms to izmantošanas programmā tās jāinicializē. Turpretī tikai lasāmais atslēgvārds ir modifikators, ko var izmantot laukos un kura vērtību var mainīt izpildlaika laikā. Tas novērš lauku mainīšanu, kuru vērtības var iestatīt, izmantojot atsauces mainīgos.
Pēc noklusējuma konstants ir statisks, un vērtības, kuras jāpiešķir mainīgā deklarēšanas brīdī, kas nozīmē, ka vērtības tiek piešķirtas tikai kompilēšanas laikā. Konstante tiek deklarēta, izmantojot atslēgu “const”. Pastāvīga lauka inicializēšanai jābūt nemainīgai izteiksmei, un to nedrīkst modificēt. Vienkārši sakot, const ir kompilācijas laika konstante. Turpretī tikai lasāmo lauku var inicializēt tikai klases līmenī, nevis metodes iekšpusē, un lauku nevar modificēt pēc inicializācijas. Citiem vārdiem sakot, tikai lasāmus mainīgos var inicializēt deklarēšanas laikā vai konstruktora iekšpusē.
Const vērtība tiek ievietota tieši kodā, jo tā darbojas kā kompilācijas laika aizstāšana. Kompilators ievieto nemainīgu vērtību montāžas metadatos, kas definē konstantu un pēc inicializēšanas iegulda vērtību pašā IL kodā, tāpēc konstantes atdalīšanas izpildes laikā nav nepieciešama atmiņa. Tikai lasāmā vērtība nav konstanta, un tā tiek glabāta iekrāvēja kaudzē atmiņas, kurai nevar piešķirt laiku, kamēr nav ielādēts tās tips. Tikai lasāmie lauki tiek saglabāti dinamiskajā atmiņā, tāpēc vērtības var iegūt tikai izpildes laikā.
Lai arī abi atslēgvārdi tiek izmantoti gandrīz vienam un tam pašam mērķim, tiem ir atšķirīga bināro versiju semantika. Kad izteiksme atsaucas uz konstanti, kompilators iegulst vērtību kompilācijas laikā. Tātad, ja vērtība tiek izmantota citā montāžā, sākotnējā montāža ir jāatjaunina un vērtība jāmaina. Izmaiņas asamblejā netiek atspoguļotas, kamēr tās nav atkārtoti apkopotas. Vērtība netiek iegūta līdz izpildlaika beigām, kad izteiksme norāda uz tikai lasāmu lauku. Ja vērtība tiek mainīta citā mezglā, izmaiņas tiek atspoguļotas mezglā, tiklīdz tas ir ielādēts, un tas nav jākompilē..
Abi atslēgvārdi tiek izmantoti vienai un tai pašai lietai, kas ir dalībnieka deklarēšana, lai vērtības nevarētu mainīties visā programmā. Tomēr const atslēgvārds ļoti atšķiras no tikai lasāmā atslēgvārda. Const ir nemainīgs mainīgais, kura vērtība jāinicializē kompilēšanas laikā, turpretī tikai lasāmo lauku var inicializēt tikai klases līmenī, deklarēšanas laikā vai konstruktora iekšpusē. Const ir sastādīšanas laika konstante, turpretī tikai lasāmie lauki ir tikai lasāmi. Konstances mainīgajiem var piekļūt, izmantojot “Classname.VariableName”, bet tikai lasāmiem mainīgajiem var piekļūt, izmantojot “instanceName.VariableName”. Turklāt const mainīgos lielumus var deklarēt metodēs, turpretī tikai read laukus nevar deklarēt metodēs.