İki readonly int
alanlı bir sınıfım var . Özellikler olarak ortaya çıkarlar:
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 { } }
}
Ancak, bu, aşağıdakilerin tamamen yasal bir kod olduğu anlamına gelir:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
Bunun işe yarayacağını varsaymaktan kaynaklanan hataların sinsi olacağından emin olabilirsiniz. Elbette, hatalı geliştirici dokümanları okumuş olmalıydı. Ancak bu, derleme veya çalışma zamanı hatasının bir sorun hakkında onu uyarmaması gerçeğini değiştirmez.
Nasıl olmalıdır Thing
sınıf Devs yukarıdaki hata yapma olasılığı daha düşük olacak şekilde değiştirilebilir?
Bir istisna atmak? Bir özellik yerine bir alıcı yöntemi kullanın?
Interfaces
. Ne yaptığımdan emin değilim.