Saya memiliki kelas dengan dua readonly int
bidang. Mereka terpapar sebagai properti:
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 { } }
}
Namun, itu berarti bahwa kode berikut ini benar-benar legal:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
Bug yang berasal dari asumsi itu akan berhasil pasti akan membahayakan. Tentu, pengembang yang salah seharusnya membaca dokumen. Tapi itu tidak mengubah fakta bahwa tidak ada kesalahan kompilasi atau run-time yang memperingatkannya tentang masalah tersebut.
Bagaimana seharusnya Thing
kelas diubah sehingga para pengembang cenderung membuat kesalahan di atas?
Melempar pengecualian? Gunakan metode pengambil alih-alih properti?
Interfaces
. Saya tidak yakin itu yang saya lakukan.