Tengo una clase con dos readonly int
campos. Están expuestos como propiedades:
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 { } }
}
Sin embargo, eso significa que lo siguiente es un código perfectamente legal:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
Los errores que surgen al suponer que funcionarían seguramente serán insidiosos. Claro, el desarrollador equivocado debería haber leído los documentos. Pero eso no cambia el hecho de que ningún error de compilación o tiempo de ejecución le advirtió sobre el problema.
¿Cómo se debe Thing
cambiar la clase para que los desarrolladores tengan menos probabilidades de cometer el error anterior?
¿Lanzar una excepción? ¿Usar un método getter en lugar de una propiedad?
Interfaces
. No estoy seguro de que sea lo que estoy haciendo.