Este important să înțelegeți conceptele programării C # înainte de a continua implementarea codului. Înainte de a ajunge la diferențele dintre const și readonly, să înțelegem mai întâi cuvintele cheie și modul în care acestea sunt utilizate într-un program. Ambele sunt cele mai frecvente cuvinte cheie utilizate în programarea C # și practic în același scop. Cu toate acestea, ambele cuvinte cheie sunt foarte diferite una de cealaltă. Const este un cuvânt rezervat folosit pentru a reprezenta valori constante și specifică faptul că o valoare nu poate fi modificată după timpul de compilare, în timp ce readonly este un modifier care poate fi folosit pe câmpuri și a cărui valoare poate fi modificată în timpul rulării. Să aruncăm o privire la unele dintre diferențele cheie dintre const și readonly.
Const se referă la o variabilă constantă și a cărei valoare trebuie atribuită o singură dată, în timpul declarației. Atunci când cuvântul cheie const este folosit în timpul unei declarații, devine o constantă, ceea ce înseamnă că valoarea rămâne constantă și nu poate fi modificată pe tot parcursul programului. Este mai mult un cuvânt rezervat, care specifică faptul că o valoare nu trebuie modificată după timpul de compilare. A const este implicit statică în mod implicit, deci poate fi apelată cu numele clasei folosind "Classname.VariableName". Valorile constante sunt numite și literale. Acesta poate fi de orice tip de date de bază, cum ar fi un întreg const, un const floating sau un literal șir.
Cuvântul cheie Readonly este un modificator care poate fi utilizat numai pe câmpuri, dar nu și pe variabilele locale. Un câmp readonly poate fi inițializat fie în momentul declarației, fie în interiorul unui constructor din aceeași clasă, astfel încât valorile pot fi diferite pentru diferite execuții ale programului în funcție de constructorul utilizat. Cuvântul cheie readonly specifică faptul că o variabilă de instanță a unui obiect nu este modificabilă și orice încercare de modificare a acesteia după declarație are drept rezultat o eroare de compilare. Variabila nu devine nemodificabilă decât după execuție. Variabilele se fac readon numai pentru a opri codul de la modificarea accidentală după ce a fost construit.
Argumentul constant (const) nu este altceva decât variabilele imuabile ale căror valori pot fi inițializate numai la momentul compilării. Aceste valori constante sunt de asemenea numite literale. Pur și simplu ne permite să specificăm dacă o variabilă este modificabilă sau nu. În termeni simpli, constantele sunt implicit statice și ar trebui inițializate înainte de a fi utilizate în program. Pe de altă parte, cuvântul cheie cu reținere este un modificator care poate fi utilizat pe câmpuri și a cărui valoare poate fi modificată în timpul rulării. Acesta împiedică schimbarea câmpurilor și ale căror valori pot fi setate prin variabilele de referință.
A const este static în mod implicit, iar valorile pentru care ar trebui să fie atribuite la momentul declarației variabile, adică valorile sunt atribuite numai la momentul compilării. O constantă este declarată utilizând cuvântul cheie "const". Inițializarea unui câmp constant trebuie să fie o expresie constantă și nu poate fi modificată. Pur și simplu pune, o const este o constantă de compilare. Un câmp readonly, pe de altă parte, poate fi inițializat numai la nivelul clasei, nu în interiorul metodei, iar câmpul nu poate fi modificat după inițializare. Cu alte cuvinte, variabilele readonly pot fi inițializate la momentul declarației sau în interiorul unui constructor.
O valoare const este pusă direct în cod deoarece acționează ca înlocuitor de compilare. Compilatorul plasează valoarea constantă în metadatele de asamblare care definesc constanta și încorporează valoarea în codul ILU însuși după inițializare, astfel că nu este necesară memorie pentru constantele la execuție pentru alocare. Valoarea de citire nu este constantă și este stocată în stația de încărcare a memoriei pentru care nu poate fi alocată până când nu este încărcată tipul acesteia. Câmpurile readonly sunt stocate în memoria dinamică, astfel încât valorile să poată fi obținute numai în timpul rulării.
Deși ambele cuvinte cheie sunt folosite aproape în același scop, ele au o semantică de versiune binară diferită. Atunci când o expresie se referă la o constantă, compilatorul încorporează valoarea la momentul compilării. Deci, dacă valoarea este folosită într-un alt ansamblu, ansamblul original trebuie să fie actualizat și valoarea trebuie schimbată. Schimbările din ansamblu nu sunt reflectate până când nu sunt recompilate. Valoarea nu se obține până la execuție atunci când o expresie se referă la un câmp readonly. Dacă valoarea este modificată într-un alt ansamblu, modificările se reflectă în ansamblu imediat ce este încărcat fără a fi nevoie să îl recompilați.
Ambele cuvinte cheie sunt folosite pentru același lucru, care este de a declara un membru astfel încât valorile să nu poată fi modificate pe tot parcursul programului. Cu toate acestea, cuvântul cheie const este foarte diferit de cuvântul cheie readonly. Const este o variabilă constantă a cărei valoare ar trebui inițializată la momentul compilării, în timp ce un câmp readonly poate fi inițializat numai la nivelul clasei, fie în momentul declarației, fie în interiorul constructorului. Const este o constantă de compilare, în timp ce câmpurile readonly sunt doar pentru citire. Conversia variabilelor poate fi accesată folosind "Classname.VariableName", în timp ce variabilele readonly pot fi accesate folosind "InstanceName.VariableName". În plus, variabilele const pot fi declarate în metode, în timp ce câmpurile readonly nu pot fi declarate în metode.