Premessa: ciò che scriverò è una banalità, ma secondo me in tanti non ne sono al corrente o non ci pensano. Di cosa parlo? Di cose del genere:
public const int MyConst = 10;
Il danno potenziale che le costanti pubbliche possono creare alla stabilità delle nostre applicazioni è enorme.
Why? Perché le costanti non sono altro che placeholder risolti in fase di compilazione. Questo vuol dire che, finché non si ricompila, il valore non viene aggiornato.
Implicazioni?
- Assembly A che definisce una costante MyConst = 10
- Assembly B che referenzia Assembly A e ne utilizza MyConst
- Assembly A cambia MyConst a 15
- Finché non ricompilo Assembly B, questo continua a vedere MyConst = 10
Ogni tanto mi capita di trovare righe di codice simili a quella in alto, con seguenti bug "strani" e dolori per scovarli. Ecco perché cerco sempre di abituare i junior che lavorano con me alla regola:
Le costanti devono essere sempre private o internal. Se serve esporle allora si utilizzino dei field readonly.
Augh!