Uczę się o kontraktach kodowych w .NET i staram się zrozumieć ideę czystych konstruktorów. Dokumentacja kontraktów kodowych stanowi:
Wszystkie metody wywoływane w ramach umowy muszą być czyste; oznacza to, że nie mogą aktualizować żadnego istniejącego stanu. Metoda czysta może modyfikować obiekty utworzone po wejściu do metody czystej.
A PureAttributedokumentacja stwierdza:
Wskazuje, że typ lub metoda jest czysta, to znaczy nie wprowadza żadnych widocznych zmian stanu.
Rozumiem te stwierdzenia, jeśli chodzi o metody, ale co z konstruktorami? Załóżmy, że miałeś taką klasę:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Ten konstruktor oczywiście wpływa na stan nowego Fooobiektu, ale nie ma innych skutków ubocznych (np. Nie manipuluje żadnym parametrem ani nie wywołuje metod nieczystych). Czy to kandydat na [Pure]czy nie? Jakie znaczenie ma umieszczenie [Pure]atrybutu na konstruktorze i kiedy powinienem to zrobić we własnym kodzie?