Sto imparando i contratti di codice in .NET e sto cercando di capire l'idea di costruttori puri. La documentazione relativa ai contratti di codice afferma:
Tutti i metodi chiamati all'interno di un contratto devono essere puri; cioè, non devono aggiornare alcuno stato preesistente. Un metodo puro è autorizzato a modificare oggetti che sono stati creati dopo l'entrata nel metodo puro.
E la PureAttribute
documentazione afferma:
Indica che un tipo o un metodo è puro, ovvero non apporta alcuna modifica dello stato visibile.
Capisco queste affermazioni quando si tratta di metodi, ma per quanto riguarda i costruttori? Supponiamo che tu abbia tenuto una lezione come questa:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Questo costruttore ovviamente influenza lo stato del nuovo Foo
oggetto, ma non ha altri effetti collaterali (ad es. Non manipola nessuno dei parametri né chiama metodi non puri). È un candidato per [Pure]
o no? Qual è il significato di posizionare un [Pure]
attributo su un costruttore e quando dovrei farlo nel mio codice?