Ho una lezione con due readonly int
campi. 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 quanto segue è un codice perfettamente legale:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
Gli insetti che derivano dal presupporre che funzionerebbe sono sicuramente insidiosi. Certo, lo sviluppatore errato avrebbe dovuto leggere i documenti. Ma ciò non cambia il fatto che nessun errore di compilazione o di runtime lo ha avvertito del problema.
Come dovrebbe Thing
essere cambiata la classe in modo che gli sviluppatori abbiano meno probabilità di commettere l'errore di cui sopra?
Generare un'eccezione? Utilizzare un metodo getter anziché una proprietà?
Interfaces
. Non sono sicuro che sia quello che sto facendo.