On tärkeää ymmärtää C # -sovelluksen käsitteet ennen koodin käyttöönottoa. Ennen kuin siirrymme const- ja readlyly-eroihin, ymmärretään ensin avainsanat ja miten niitä käytetään ohjelmassa. Molemmat ovat yleisimmät avainsanat, joita käytetään C # -ohjelmoinnissa ja pohjimmiltaan samaan tarkoitukseen. Molemmat avainsanat ovat kuitenkin hyvin erilaisia toisistaan. Const on varattu sana, jota käytetään vakioarvojen esittämiseen, ja se määrittelee, että arvoa ei voida muuttaa kompilointiajan jälkeen, kun taas readonly on modifikaattori, jota voidaan käyttää kentissä ja jonka arvoa voidaan muuttaa ajon aikana. Katsotaanpa joitain keskeisiä eroja const: n ja readonly -sovelluksen välillä.
Const viittaa vakiomuuttujaan, jonka arvo on annettava vain kerran, ilmoituksen aikana. Kun avainsanaa const käytetään ilmoituksen aikana, siitä tulee vakio, mikä tarkoittaa, että arvo pysyy vakiona eikä sitä voida muuttaa koko ohjelman ajan. Se on pikemminkin varattu sana, joka määrittelee, että arvoa ei tule muokata käännösajan jälkeen. Const on oletuksena implisiittisesti staattinen, joten sitä voidaan kutsua luokan nimellä käyttämällä ”Classname.VariableName”. Vakioarvoja kutsutaan myös kirjaimiksi. Se voi olla mikä tahansa perustietotyyppi, kuten kokonaisluku const, kelluva const tai merkkijono kirjaimellinen.
Readonly-avainsana on modifikaattori, jota voidaan käyttää vain kentissä, mutta ei paikallisissa muuttujissa. Vain lukukenttä voidaan alustaa joko ilmoituksen tekohetkellä tai samassa luokassa olevan rakentajan sisällä, joten arvot voivat olla erilaiset ohjelman eri suorituksissa käytetyn rakentajan mukaan. Vain lukija-avainsana määrittelee, että objektin esiintymämuuttujaa ei voida muokata, ja kaikki yritykset muuttaa sitä ilmoituksen jälkeen johtavat kokoamisvirheeseen. Muuttujasta ei tule modifiointia vasta toteutuksen jälkeen. Muuttujat tehdään vain lukukelpoisiksi, jotta koodi ei vahingossa muuttuisi vahingossa muuttamasta sitä rakennuksen jälkeen.
Jatkuva (const) avainsana ei ole muuta kuin muuttumattomia muuttujia, joiden arvo voidaan alustaa vain käännöshetkellä. Näitä vakioarvoja kutsutaan myös kirjaimiksi. Sen avulla voimme vain määrittää, onko muuttuja muokattavissa vai ei. Yksinkertaisesti sanottuna vakiot ovat epäsuorasti staattisia, ja ne tulisi alustaa ennen niiden käyttöä ohjelmassa. Sitä vastoin luku-avainsana on modifikaattori, jota voidaan käyttää kentissä ja jonka arvoa voidaan muuttaa ajon aikana. Se estää kenttiä muuttamasta ja niiden arvot voidaan asettaa referenssimuuttujien avulla.
Const on oletuksena staattinen ja arvot, joille olisi annettava muuttujan ilmoittamishetkellä, tarkoittavat, että arvot annetaan vain kokoamisajankohtana. Vakio ilmoitetaan käyttämällä const-avainsanaa. Vakiokentän alustuksen on oltava vakiolauseke, eikä sitä saa muuttaa. Yksinkertaisesti sanottuna, const on käännösaikavakio. Toisaalta luettavissa oleva kenttä voidaan alustaa vain luokan tasolla, ei menetelmän sisällä, ja kenttää ei voida muokata alustuksen jälkeen. Toisin sanoen, vain luku -muuttujat voidaan alustaa ilmoitushetkellä tai rakentajan sisällä.
Const-arvo laitetaan suoraan koodiin, koska se toimii käännösajan korvaamisena. Kääntäjä sijoittaa vakioarvon kokoonpanon metatietoihin, jotka määrittelevät vakion ja upottavat arvon itse IL-koodiin alustuksen jälkeen, joten vakioille ei tarvita muistia allokointiajon aikana. Vain luku -arvo ei ole vakio ja se on tallennettu latauslaatikkoon, jonka muistiin ei voida allokoida vasta sen tyyppiä. Vain lukukentät tallennetaan dynaamiseen muistiin, joten arvot voidaan saada vain suorituksen aikana.
Vaikka molempia avainsanoja käytetään melkein samaan tarkoitukseen, niillä on erilainen binäärisen version semantiikka. Kun lauseke viittaa vakioon, kääntäjä upottaa arvon käännöshetkellä. Joten jos arvoa käytetään eri kokoonpanossa, alkuperäinen kokoonpano on päivitettävä ja arvoa on muutettava. Kokoonpanon muutokset heijastuvat vasta, kun ne on koottu uudelleen. Arvo saadaan vasta ajon aikana, kun lauseke viittaa vain luettavissa olevaan kenttään. Jos arvoa muutetaan toisessa kokoonpanossa, muutokset heijastuvat kokoonpanossa heti, kun se ladataan ilman, että sitä täytyy kääntää uudelleen.
Molempia avainsanoja käytetään samaan asiaan, eli jäsenen ilmoittamiseen, jotta arvoja ei voida muuttaa koko ohjelmassa. Const-avainsana on kuitenkin hyvin erilainen kuin vain avainsana. Const on vakiomuuttuja, jonka arvo tulisi alkaa kokoamisaikana, kun taas lukukelpoinen kenttä voidaan alustaa vain luokatasolla, joko ilmoituksen tekohetkellä tai rakentajan sisällä. Const on käännösaikavakio, kun taas vain lukukentät ovat vain luku -tyyppisiä. Vakiomuuttujiin pääsee “Classname.VariableName” -sovelluksella, kun taas vain luku -muuttujiin päästään “instanceName.VariableName” -sovelluksella. Lisäksi const-muuttujat voidaan ilmoittaa menetelmissä, kun taas vain lukukenttiä ei voida ilmoittaa menetelmissä.