У мене є клас з двома readonly int
полями. Вони піддаються впливу властивостей:
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 { } }
}
Однак це означає, що наступним є абсолютно юридичний код:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
Помилки, які походять з припущення, що це спрацює, безумовно, підступні. Звичайно, помилковий розробник повинен був прочитати документи. Але це не змінює того факту, що жодна помилка компіляції чи запуску не попереджала його про проблему.
Як слід змінити Thing
клас, щоб менші шанси розробити помилки вище?
Кинути виняток? Використовувати метод getter замість властивості?
Interfaces
. Я не впевнений, що це роблю.