Mam klasę z dwoma readonly int
polami. Są eksponowane jako właściwości:
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 { } }
}
Oznacza to jednak, że następujący kod jest całkowicie zgodny z prawem:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
Błędy wynikające z założenia, że to zadziała, z pewnością będą podstępne. Jasne, błędny programista powinien przeczytać dokumenty. Ale to nie zmienia faktu, że żaden błąd kompilacji lub wykonania nie ostrzegł go o problemie.
Jak Thing
zmienić klasę, aby deweloperzy nie popełnili powyższego błędu?
Rzuć wyjątek? Używasz metody gettera zamiast właściwości?
Interfaces
. Nie jestem pewien, czy to właśnie robię.