J'apprends les contrats de code dans .NET et j'essaie de comprendre l'idée de constructeurs purs. La documentation des contrats de code indique:
Toutes les méthodes appelées dans un contrat doivent être pures; c'est-à-dire qu'ils ne doivent mettre à jour aucun état préexistant. Une méthode pure est autorisée à modifier les objets qui ont été créés après l'entrée dans la méthode pure.
Et la PureAttribute
documentation indique:
Indique qu'un type ou une méthode est pur, c'est-à-dire qu'il n'apporte aucun changement d'état visible.
Je comprends ces affirmations en matière de méthodes, mais qu'en est-il des constructeurs? Supposons que vous ayez eu un cours comme celui-ci:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Ce constructeur affecte évidemment l'état du nouvel Foo
objet, mais il n'a pas d'autres effets secondaires (par exemple, il ne manipule aucun des paramètres et n'appelle aucune méthode non pure). Est-ce un candidat [Pure]
ou non? Quelle est l'importance de placer un [Pure]
attribut sur un constructeur, et quand dois-je le faire dans mon propre code?
[Pure]
attribut, et de l'utiliser ailleurs dans un contrat pour avoir une réponse définitive.L'objet ne peut pas être utilisé tant qu'il n'est pas construit dans ce cas. Le constructeur est donc pur. Si le constructeur appelait un autre code, ou invoquait un délégué, et que l'autre code modifiait la propriété mutable, ce ne serait pas pur. Pour être plus sûr, il vaut mieux rendre l'immeuble immuable.
la source