se si modifica il valore di un const, è necessario ricostruire tutti i clienti
che non è la soluzione corretta. Se si modifica il valore di un const, non era una costante. Le costanti sono per definizione cose che non cambiano mai il loro valore. L'idea che tu voglia cambiare il valore di una costante significa che stai facendo qualcosa di logicamente impossibile, e quindi ovviamente le cose si romperanno; stai facendo qualcosa che hai detto che non avresti fatto. Se vai in giro a mentire al compilatore e fa male quando lo fai, allora smetti di mentire al compilatore.
Il prezzo dell'oro non è una costante. Il nome della tua banca non è una costante. Il numero di versione del tuo programma non è una costante. Queste cose cambiano, quindi non li rendono costanti. Le costanti sono cose come pi, o il numero di protoni in un atomo d'oro.
Le variabili sono cose che possono variare - è per questo che vengono chiamate "variabili". Le costanti sono cose che rimangono ... costanti. Se può variare, rendila una variabile. Se è costante, rendilo costante. È così semplice.
perché è quello? sia statico in lettura che const sono statici
Sicuro. Che cosa c'entra questo? "statico" in C# significa "l'elemento con nome è associato al tipo, piuttosto che con una particolare istanza del tipo". ("Statico" è quindi una scelta scadente di termini, VB lo fa meglio con "condiviso".)
Se il nome è associato al tipo o un'istanza è irrilevante alla domanda se il nome si riferisce a un costante o variabile.
dove effettivamente i valori vengono salvati in entrambi static vonon readscly?
Quando si utilizza un valore costante, il valore è "cotto in" ovunque sia utilizzata. Questo è sicuro perché non cambierà mai. Non cambierà mai perché è costante e questo è ciò che significa "costante".
Quando si utilizza una variabile, il valore della variabile viene rilevato in fase di esecuzione ogni volta. "readonly" significa semplicemente "questa variabile può essere modificata solo nel costruttore della classe o nel programma di inizializzazione del campo". È ancora una variabile. (*)
come rendere un campo statico in sola lettura - in realtà risolvere questo problema dietro la scena?
Non hai indicato quale sia il problema, quindi non so quale problema stai cercando di risolvere.
(*) i campi di sola lettura per sono considerati valori non costanti fuori il costruttore, in modo che un campo di sola lettura di tipo di valore mutabili non può essere mutato, e in modo che non si può prendere un ref
a una sola lettura campo e quindi muta il riferimento.
È perché il compilatore "allinea" il valore della costante, anziché fare riferimento a una variabile proveniente da un altro assieme. – ken2k
Non si sapeva mai questo comportamento delle coste tra gli assemblaggi. Buona domanda –