Estou aprendendo sobre contratos de código no .NET e tentando entender a idéia de construtores puros. o documentação dos contratos de código declara:
Todos os métodos chamados dentro de um contrato devem ser puros; isto é, eles não devem atualizar nenhum estado preexistente. Um método puro pode modificar objetos que foram criados após a entrada no método puro.
E a PureAttribute
documentação declara:
Indica que um tipo ou método é puro, ou seja, não faz nenhuma alteração visível no estado.
Eu entendo essas declarações quando se trata de métodos, mas e os construtores? Suponha que você tenha uma classe como esta:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Esse construtor obviamente afeta o estado do novo Foo
objeto, mas não tem outros efeitos colaterais (por exemplo, ele não manipula nenhum dos parâmetros ou chama métodos não puros). Este candidato é [Pure]
ou não? Qual é o significado de colocar um [Pure]
atributo em um construtor e quando devo fazer isso no meu próprio código?