Ho una classe con due campi readonly int
. Sono esposti come proprietà:
public class Thing
{
private readonly int _foo, _bar;
/// <summary> I AM IMMUTABLE. </summary>
public Thing(int foo, int bar)
{
_foo = foo;
_bar = bar;
}
public int Foo { get { return _foo; } set { } }
public int Bar { get { return _bar; } set { } }
}
Tuttavia, ciò significa che il seguente codice è perfettamente legale:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
I bug che provengono da assumendo che funzionerebbero sarebbero sicuramente insidiosi. Certo, lo sviluppatore errato dovrebbe aver letto i documenti. Ma ciò non cambia il fatto che nessun errore di compilazione o di runtime lo ha avvertito del problema.
Come deve essere modificata la classe Thing
in modo che gli sviluppatori abbiano meno probabilità di commettere l'errore sopra riportato?
Getta un'eccezione? Usa un metodo getter invece di una proprietà?