Het is belangrijk om de concepten van C # -programmering te begrijpen voordat u doorgaat met het implementeren van de code. Voordat we naar de verschillen tussen const en readonly springen, laten we eerst de zoekwoorden begrijpen en zien hoe deze worden gebruikt in een programma. Beide zijn de meest voorkomende zoekwoorden die worden gebruikt in C # -programma's en in feite voor hetzelfde doel. Beide zoekwoorden zijn echter zeer verschillend van elkaar. Const is een gereserveerd woord dat wordt gebruikt om constante waarden weer te geven en geeft aan dat een waarde niet kan worden gewijzigd na compile-time, terwijl readonly een modifier is die op velden kan worden gebruikt en waarvan de waarde tijdens runtime kan worden gewijzigd. Laten we eens kijken naar enkele van de belangrijkste verschillen tussen const en readonly.
Const verwijst naar een constante variabele waarvan de waarde tijdens de aangifte slechts eenmaal hoeft te worden toegewezen. Wanneer het trefwoord const wordt gebruikt tijdens een declaratie, wordt het een constante betekenis. De waarde blijft constant en kan niet gedurende het programma worden gewijzigd. Het is meer een gereserveerd woord dat aangeeft dat een waarde niet moet worden gewijzigd na het compileren. Een const is standaard impliciet statisch, dus het kan met de klassennaam worden gebeld met behulp van "Classname.VariableName". De constante waarden worden ook letterlijk genoemd. Het kan van elk willekeurig gegevenstype zijn, zoals een integer const, een floating const of een letterlijke tekenreeks.
Het alleen-lezen-trefwoord is een modifier die alleen op velden maar niet op lokale variabelen kan worden gebruikt. Een alleen-lezen veld kan worden geïnitialiseerd op het moment van de declaratie of in een constructor in dezelfde klasse, dus de waarden kunnen verschillen voor verschillende uitvoeringen van het programma, afhankelijk van de gebruikte constructor. Het readonly sleutelwoord geeft aan dat een instantievariabele van een object niet wijzigbaar is en elke poging om het te wijzigen na declaratie resulteert in een compilatiefout. De variabele wordt pas na de uitvoering niet-wijzigbaar. Variabelen worden alleen read-only gemaakt om te stoppen met het callen van de code door deze per ongeluk te wijzigen nadat deze is geconstrueerd.
Constant (const) trefwoord is niets anders dan onveranderlijke variabelen waarvan de waarde alleen kan worden geïnitialiseerd bij het compileren. Deze constante waarden worden ook wel letterlijk genoemd. Het stelt ons eenvoudig in staat om te specificeren of een variabele aanpasbaar is of niet. Eenvoudig gezegd zijn constanten impliciet statisch en moeten ze worden geïnitialiseerd voordat ze in het programma kunnen worden gebruikt. Readonly-trefwoord is daarentegen een modifier die op velden kan worden gebruikt en waarvan de waarde tijdens runtime kan worden gewijzigd. Het voorkomt dat velden worden gewijzigd en de waarden ervan kunnen worden ingesteld met behulp van referentievariabelen.
Een const is standaard statisch en de waarden waarvoor moet worden toegewezen op het moment van variabele declaratie, wat betekent dat de waarden alleen tijdens het compileren worden toegewezen. Een constante wordt gedeclareerd met het sleutelwoord "const". De initialisatie van een constant veld moet een constante uitdrukking zijn en mag niet worden gewijzigd. Simpel gezegd, een const is een constante compilatie. Een alleen-lezen veld kan daarentegen alleen worden geïnitialiseerd op klasseniveau, niet binnen de methode, en het veld kan niet worden gewijzigd na initialisatie. Met andere woorden, alleen-lezen variabelen kunnen worden geïnitialiseerd op het moment van de declaratie of in een constructor.
Een const-waarde wordt rechtstreeks in de code geplaatst, omdat deze fungeert als de vervangende compilatie. De compiler plaatst de constante waarde in de metagegevens van de assembly die de constante definieert en sluit de waarde in de IL-code zelf in na initialisatie, dus er is geen geheugen vereist voor constanten tijdens runtime voor toewijzing. Readonly-waarde is niet constant en wordt opgeslagen in de laderheap waarvan het geheugen niet kan worden toegewezen voordat het type is geladen. De readonly-velden worden opgeslagen in het dynamische geheugen zodat de waarden alleen tijdens runtime kunnen worden verkregen.
Hoewel beide zoekwoorden bijna voor hetzelfde doel worden gebruikt, hebben ze verschillende binaire versie-semantiek. Wanneer een expressie verwijst naar een constante, sluit de compiler de waarde in tijdens compilatie. Dus als de waarde in een andere assembly wordt gebruikt, moet de originele assembly worden bijgewerkt en moet de waarde worden gewijzigd. De wijzigingen in de assembly worden pas weergegeven nadat deze opnieuw zijn gecompileerd. De waarde wordt niet verkregen tot de runtime wanneer een uitdrukking verwijst naar een readonly-veld. Als de waarde in een andere assembly wordt gewijzigd, worden de wijzigingen weerspiegeld in de assembly zodra deze is geladen zonder opnieuw te hoeven compileren.
Beide sleutelwoorden worden gebruikt om hetzelfde lid te declareren zodat de waarden niet gedurende het hele programma kunnen worden gewijzigd. Const-zoekwoord is echter heel anders dan het alleen-lezen-trefwoord. Const is een constante variabele waarvan de waarde moet worden geïnitialiseerd bij het compileren, terwijl een readonly-veld alleen kan worden geïnitialiseerd op klassenniveau, hetzij op het moment van de declaratie of in de constructor. Const is een compile-time constant terwijl readonly fields read-only zijn. Constance-variabelen kunnen worden geopend met behulp van "Classname.VariableName", terwijl alleen-lezen variabelen kunnen worden geopend met behulp van "Exemplaarnaam.Variabele naam". Bovendien kunnen const-variabelen worden gedeclareerd in methoden, terwijl readonly-velden niet in methoden kunnen worden gedeclareerd.