È importante comprendere i concetti di programmazione C # prima di procedere con l'implementazione del codice. Prima di saltare alle differenze tra const e readonly, capiamo prima le parole chiave e come vengono utilizzate in un programma. Entrambe sono le parole chiave più comuni utilizzate nella programmazione C # e fondamentalmente per lo stesso scopo. Tuttavia, entrambe le parole chiave sono molto diverse l'una dall'altra. Const è una parola riservata usata per rappresentare i valori costanti e specifica che un valore non può essere modificato dopo la compilazione, mentre readonly è un modificatore che può essere utilizzato sui campi e il cui valore può essere modificato durante il runtime. Diamo un'occhiata ad alcune delle principali differenze tra const e readonly.
Const fa riferimento a una variabile costante e il cui valore deve essere assegnato una sola volta, durante la dichiarazione. Quando la parola chiave const viene utilizzata durante una dichiarazione, diventa una costante, il che significa che il valore rimane costante e non può essere modificato durante il programma. È più di una parola riservata che specifica che un valore non deve essere modificato dopo la compilazione. Un const è implicitamente statico di default, quindi può essere chiamato con il nome della classe usando "Classname.VariableName". I valori costanti sono anche chiamati letterali. Può essere di qualsiasi tipo di dati di base come un intero const, un const floating o un letterale stringa.
La parola chiave Readonly è un modificatore che può essere utilizzato solo sui campi ma non sulle variabili locali. Un campo readonly può essere inizializzato al momento della dichiarazione o all'interno di un costruttore nella stessa classe, quindi i valori possono essere diversi per le diverse esecuzioni del programma a seconda del costruttore utilizzato. La parola chiave readonly specifica che una variabile di istanza di un oggetto non è modificabile e qualsiasi tentativo di modificarlo dopo la dichiarazione genera un errore di compilazione. La variabile non diventa non modificabile fino a dopo l'esecuzione. Le variabili vengono create in sola lettura per interrompere la chiamata al codice dalla modifica accidentale dopo la sua costruzione.
La parola chiave const (const) non è altro che variabili immutabili il cui valore può essere solo inizializzato al momento della compilazione. Questi valori costanti sono anche chiamati letterali. Semplicemente ci consente di specificare se una variabile è modificabile o meno. In termini semplici, le costanti sono implicitamente statiche e dovrebbero essere inizializzate prima di essere utilizzate nel programma. La parola chiave Readonly, d'altra parte, è un modificatore che può essere utilizzato sui campi e il cui valore può essere modificato durante il runtime. Impedisce che i campi vengano modificati e i cui valori possono essere impostati tramite variabili di riferimento.
Un const è statico di default e i valori per i quali dovrebbero essere assegnati al momento della dichiarazione della variabile che significa che i valori sono assegnati solo al momento della compilazione. Una costante viene dichiarata usando la parola chiave "const". L'inizializzazione di un campo costante deve essere un'espressione costante e non può essere modificata. In poche parole, un const è una costante in fase di compilazione. Un campo readonly, d'altra parte, può essere inizializzato solo a livello di classe non all'interno del metodo e il campo non può essere modificato dopo l'inizializzazione. In altre parole, le variabili di sola lettura possono essere inizializzate al momento della dichiarazione o all'interno di un costruttore.
Un valore const viene inserito direttamente nel codice poiché agisce da sostituto in fase di compilazione. Il compilatore colloca il valore costante nei metadati dell'assieme che definisce la costante e incorpora il valore nel codice IL stesso dopo l'inizializzazione, quindi nessuna memoria è richiesta per le costanti in fase di runtime per l'allocazione. Il valore Readonly non è costante ed è archiviato nell'heap del caricatore la cui memoria non può essere allocata fino a quando il suo tipo non viene caricato. I campi di sola lettura sono memorizzati nella memoria dinamica in modo che i valori possano essere ottenuti solo in fase di esecuzione.
Sebbene entrambe le parole chiave siano utilizzate quasi per lo stesso scopo, hanno una semantica di versioning binaria diversa. Quando un'espressione fa riferimento a una costante, il compilatore incorpora il valore in fase di compilazione. Pertanto, se il valore viene utilizzato in un diverso assieme, è necessario aggiornare l'assieme originale e modificare il valore. Le modifiche all'assembly non vengono riflesse finché non viene ricompilato. Il valore non viene ottenuto fino al runtime quando un'espressione fa riferimento a un campo readonly. Se il valore viene modificato in un diverso assieme, le modifiche vengono riflesse nell'assieme non appena viene caricato senza la necessità di ricompilarlo.
Entrambe le parole chiave sono utilizzate per la stessa cosa che è dichiarare un membro in modo che i valori non possano essere modificati in tutto il programma. Tuttavia, la parola chiave const è molto diversa dalla parola chiave readonly. Const è una variabile costante il cui valore deve essere inizializzato al momento della compilazione, mentre un campo readonly può essere inizializzato solo a livello di classe, al momento della dichiarazione o all'interno del costruttore. Const è una costante in fase di compilazione, mentre i campi readonly sono di sola lettura. È possibile accedere alle variabili di Constance utilizzando "Classname.VariableName" mentre è possibile accedere alle variabili readonly utilizzando "InstanceName.VariableName". Inoltre, le variabili const possono essere dichiarate nei metodi, mentre i campi readonly non possono essere dichiarati nei metodi.