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?
[Pure]
atributo e usá-la em outro lugar do contrato para obter uma resposta definitiva.O objeto não pode ser usado até que seja construído neste caso. Portanto, o construtor é puro. Se o construtor chamasse outro código ou invocasse um delegado, e o outro código modificasse a propriedade mutável, isso não seria puro. Para ser mais seguro, é melhor tornar a propriedade imutável.
fonte