Ich lerne etwas über Codeverträge in .NET und versuche, die Idee reiner Konstruktoren zu verstehen. Der Code Verträge Dokumentation lautet:
Alle Methoden, die in einem Vertrag aufgerufen werden, müssen rein sein. Das heißt, sie dürfen keinen bereits vorhandenen Status aktualisieren. Eine reine Methode darf Objekte ändern, die nach dem Eintritt in die reine Methode erstellt wurden.
Und die PureAttribute
Dokumentation besagt:
Gibt an, dass ein Typ oder eine Methode rein ist, dh, dass keine sichtbaren Statusänderungen vorgenommen werden.
Ich verstehe diese Aussagen, wenn es um Methoden geht, aber was ist mit Konstruktoren? Angenommen, Sie hatten eine Klasse wie diese:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Dieser Konstruktor wirkt sich offensichtlich auf den Zustand des neuen Foo
Objekts aus, hat jedoch keine weiteren Nebenwirkungen (z. B. er manipuliert keinen der Parameter oder ruft keine nicht-reinen Methoden auf). Ist das ein Kandidat für [Pure]
oder nicht? Welche Bedeutung hat das Platzieren eines [Pure]
Attributs in einem Konstruktor, und wann sollte ich dies in meinem eigenen Code tun?