Det er vigtigt at forstå begreberne C # -programmering, før du fortsætter med at implementere koden. Inden vi springer til forskellene mellem const og readonly, lad os først forstå nøgleordene, og hvordan de bruges i et program. Begge er de mest almindelige nøgleord, der bruges i C # -programmering og dybest set til det samme formål. Begge nøgleord er imidlertid meget forskellige fra hinanden. Const er et reserveret ord, der bruges til at repræsentere konstante værdier, og det specificerer, at en værdi ikke kan ændres efter kompileringstid, mens readonly er en modifikator, der kan bruges på felter, og hvis værdi kan ændres i løbet af runtime. Lad os se på nogle af de vigtigste forskelle mellem const og readonly.
Const refererer til en konstant variabel, og hvis værdi kun skal tildeles én gang under erklæringen. Når nøgleordet const bruges under en erklæring, bliver det en konstant betydning, hvilket betyder, at værdien forbliver konstant og kan ikke ændres i hele programmet. Det er mere et reserveret ord, der specificerer, at en værdi ikke må ændres efter kompileringstid. En const er implicit statisk som standard, så den kan kaldes med klassens navn ved hjælp af “Classname.VariableName”. De konstante værdier kaldes også som bogstaver. Det kan være af en hvilken som helst grundlæggende datatype, såsom en heltalskonst, en flydende const eller en streng bogstavelig.
Readonly-nøgleordet er en modifikator, der kun kan bruges på felter, men ikke lokale variabler. Et readonly felt kan initialiseres enten på erklæringstidspunktet eller i en konstruktør i samme klasse, så værdierne kan være forskellige for forskellige udførelser af programmet afhængigt af den anvendte konstruktør. Det readonly nøgleord specificerer, at en forekomstvariabel af et objekt ikke kan ændres, og ethvert forsøg på at ændre det efter erklæring resulterer i kompilationsfejl. Variablen bliver ikke uændret før efter udførelsen. Variabler laves kun readonly for at stoppe med at kalde koden i at ændre den ved en fejltagelse efter den er konstrueret.
Konstant (const) nøgleord er intet andet end uforanderlige variabler, hvis værdi kun kan initialiseres på kompileringstidspunktet. Disse konstante værdier kaldes også som bogstaver. Det giver os ganske enkelt mulighed for at specificere, om en variabel kan ændres eller ej. Kort sagt er konstanter implicit statiske, og de skal initialiseres, før de skal bruges i programmet. Readonly nøgleord er på den anden side en modifikator, der kan bruges på felter, og hvis værdi kan ændres i løbet af runtime. Det forhindrer, at felter ændres, og hvis værdier kan indstilles gennem referencevariabler.
En const er som standard statisk, og de værdier, der skal tildeles på tidspunktet for variabel deklaration, hvilket betyder, at værdierne kun er tildelt på kompileringstidspunktet. En konstant deklareres ved hjælp af "const" nøgleordet. Initialiseringen af et konstant felt skal være et konstant udtryk og må ikke ændres. Kort sagt er en const en kompileringstidskonstant. Et readonly felt kan på den anden side kun initialiseres på klassetrinnet ikke inden for metoden, og feltet kan ikke ændres efter initialisering. Med andre ord kan readonly variabler initialiseres på tidspunktet for deklarationen eller inde i en konstruktør.
En const-værdi sættes direkte i koden, da den fungerer som kompileringstiden. Kompilatoren placerer den konstante værdi i monteringsmetadataen, der definerer konstanten og indlejrer værdien i selve IL-koden efter initialisering, så der kræves ingen hukommelse til konstanter ved driftstid for tildeling. Den readonly værdi er ikke konstant, og den er gemt i loader-haugen, hvis hukommelse ikke kan tildeles, før dens type er indlæst. De readonly felter gemmes i den dynamiske hukommelse, så værdierne kun kan opnås ved kørsel.
Selvom begge nøgleord bruges næsten til det samme formål, har de forskellige binære versioner semantik. Når et udtryk refererer til en konstant, integrerer kompilatoren værdien på kompileringstidspunktet. Så hvis værdien bruges i en anden samling, skal den originale samling opdateres, og værdien bør ændres. Ændringerne i samlingen afspejles først, når den er blevet kompileret igen. Værdien opnås ikke før runtime, når et udtryk refererer til et readonly felt. Hvis værdien ændres i en anden samling, afspejles ændringerne i enheden, så snart den er indlæst uden at skulle kompilere den igen.
Begge nøgleord bruges til det samme som at erklære et medlem, så værdierne ikke kan ændres i hele programmet. Const-nøgleord er imidlertid meget forskellig fra det readonly nøgleord. Const er en konstant variabel, hvis værdi skal initialiseres på kompileringstidspunktet, hvorimod et readonly felt kun kan initialiseres på klasseniveau, enten på erklæringstidspunktet eller i konstruktøren. Const er en kompileringstidskonstant, hvorimod readonly felter er skrivebeskyttet. Du kan få adgang til konstantvariabler ved hjælp af “Classname.VariableName”, mens der kan fås adgang til readonly variabler ved hjælp af “InstanceName.VariableName”. Desuden kan const-variabler deklareres i metoder, mens readonly-felter ikke kan deklareres i metoder.