Visual Basic supporta due principali modi per dichiarare valori immutabili — Const e ReadOnly. Const è destinato a costanti compile-time, il cui valore è noto al momento della compilazione. ReadOnly consente l'inizializzazione solo al momento della dichiarazione o nel costruttore e garantisce l'immutabilità durante l'esecuzione.
Storicamente, sin dai tempi di VB6 e precedenti, tale semantica ha permesso di evitare numeri magici e ha facilitato la manutenzione. In VB.NET, le possibilità sono state ampliate con l'introduzione di ReadOnly per campi di istanza e di classe.
L'uso di Const per valori determinati durante l'esecuzione o che dipendono da dati esterni può portare a errori. Ambiti di visibilità confusi portano anche a bug.
Utilizzare Const per valori semplici immutabili (numeri, stringhe) noti al momento della compilazione, e ReadOnly per i casi in cui il valore può essere calcolato nel costruttore, ma dopo è accessibile solo in lettura.
Esempio di codice:
Public Class MathConstants Public Const Pi As Double = 3.1415926535 Public ReadOnly Property UtcCreated As DateTime Public Sub New() UtcCreated = DateTime.UtcNow End Sub End Class
Caratteristiche chiave:
È possibile dichiarare Const per un valore ottenuto a runtime (ad esempio, da un file)?
No — Const richiede un valore al momento della compilazione. Per l'inizializzazione a runtime, si deve utilizzare ReadOnly.
Un campo ReadOnly può essere modificato dopo il costruttore?
No — la modifica è possibile solo al momento dell'inizializzazione (o al momento della dichiarazione, o nel costruttore), dopo di che è accessibile solo in lettura.
Si dovrebbe usare Const per numeri float/double nei calcoli matematici?
Sì, se il valore è noto in anticipo. Ma se utilizzato in altre assemblaggi, la modifica del valore Const richiederà la ricompilazione di tutti i moduli dipendenti, poiché il compilatore integra il valore direttamente.
Uno sviluppatore ha dichiarato Const per il percorso a una cartella, che in seguito doveva essere modificato in ambienti diversi (dev/prod). Di conseguenza, quando il percorso veniva modificato, era necessario ricompilare tutti i progetti che utilizzavano questo Const.
Pro:
Contro:
Realizzato ReadOnly per i percorsi, inizializzati nel costruttore tenendo conto della configurazione ambientale. I valori possono essere facilmente modificati tramite impostazioni senza ricompilare l'intera applicazione.
Pro:
Contro: