У меня есть класс с двумя 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
изменить класс, чтобы разработчики с меньшей вероятностью допустили вышеуказанную ошибку?
Бросить исключение? Использовать метод получения вместо свойства?
Interfaces
. Я не уверен, что это то, что я делаю.