Considerare:Perché i campi di sola lettura possono essere modificati tramite parametri di riferimento?
class Foo
{
private readonly string _value;
public Foo()
{
Bar(ref _value);
}
private void Bar(ref string value)
{
value = "hello world";
}
public string Value
{
get { return _value; }
}
}
// ...
var foo = new Foo();
Console.WriteLine(foo.Value); // "hello world"
che modo questo anche compilare, comunque lavorare? Non dovrei essere in grado di assegnare un valore diverso al campo _value
al di fuori del costruttore, poiché è contrassegnato con readonly
. Tuttavia, passarlo a ref
in un metodo e può essere effettivamente modificato.
È pericoloso? Perché? Mi sembra sbagliato, ma non riesco a capire bene.
Poiché un valore di sola lettura che non può mai essere scritta esiste già, è 'default'. Una variabile 'readonly' utile * deve * essere scritta almeno una volta. Il dettaglio non così ovvio è che l'inizializzazione del campo avviene effettivamente nel costruttore, il compilatore C# sposta il codice. –