Estoy aprendiendo acerca de los contratos de código en .NET, y estoy tratando de entender la idea de constructores puros. La documentación de los contratos de código establece:
Todos los métodos que se llaman dentro de un contrato deben ser puros; es decir, no deben actualizar ningún estado preexistente. Un método puro puede modificar los objetos que se han creado después de ingresar al método puro.
Y la PureAttribute
documentación dice:
Indica que un tipo o método es puro, es decir, no realiza ningún cambio de estado visible.
Entiendo estas afirmaciones cuando se trata de métodos, pero ¿qué pasa con los constructores? Supongamos que tuvieras una clase como esta:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Este constructor obviamente afecta el estado del nuevo Foo
objeto, pero no tiene otros efectos secundarios (por ejemplo, no manipula ninguno de los parámetros ni llama a métodos no puros). ¿Es este un candidato [Pure]
o no? ¿Cuál es el significado de colocar un [Pure]
atributo en un constructor, y cuándo debo hacer esto en mi propio código?