La domanda è in realtà molto semplice. Il seguente codice genera l'eccezione destra sotto di esso:Perché siamo autorizzati a usare const con i tipi di riferimento se possiamo assegnare solo null a loro?
class Foo
{
public const StringBuilder BarBuilder = new StringBuilder();
public Foo(){
}
}
Errore:
Foo.BarBuilder' is of type 'System.Text.StringBuilder'. A const field of a reference type other than string can only be initialized with null.
MSDN dice questo, che ho capito e ha senso da const
prospettiva:
A constant expression is an expression that can be fully evaluated at compile time. Therefore, the only possible values for constants of reference types are string and a null reference.
Tuttavia, non vedo il motivo per cui o dove useremo la costante null
. Quindi, perché in primo luogo un tipo di riferimento (diverso dalla stringa) può essere definito con const
se può essere impostato solo su null
e se è stata una decisione deliberata (che credo sia), quindi dove possiamo usare costante con null valori?
Aggiornamento:
Quando pensiamo a una risposta, per favore cerchiamo di pensare in modo diverso rispetto "Abbiamo questo modo perché non che ..." contesto.
Stai chiedendo –
'const' non è stato progettato per i tipi di riferimento – Fabio
Il compilatore ti impedisce di usare const come questo, il messaggio dovrebbe _non_ essere interpretato come" puoi assegnare un tipo di riferimento const a null ", come puoi vedere non è utile . – kennyzx