Design von Verträgen und Konstrukteuren

Ich implementiere meine eigene ArrayList für Schulzwecke, versuche jedoch, C # 4.0-Codeverträge zu verwenden, um die Dinge ein wenig aufzupeppen. Alles war in Ordnung, bis ich den Konstrukteuren Verträge hinzufügen musste. Soll ich Contract.Ensures () im leeren Parameter-Konstruktor hinzufügen?

    public ArrayList(int capacity) {
        Contract.Requires(capacity > 0);
        Contract.Ensures(Size == capacity);

        _array = new T[capacity];
    }

    public ArrayList() : this(32) {
        Contract.Ensures(Size == 32);
    }

Ich würde ja sagen, jede Methode sollte einen genau definierten Vertrag haben. Warum aber, wenn es nur darum geht, Arbeit an den "Haupt" -Konstruktor zu delegieren? Logischerweise würde ich nicht brauchen.

Der einzige Punkt, an dem es nützlich wäre, den Vertrag in beiden Konstruktoren explizit zu definieren, ist, wenn wir in Zukunft Intelisense-Unterstützung für Verträge haben. Wäre dies der Fall, wäre es hilfreich, explizit anzugeben, über welche Verträge jede Methode verfügt, wie dies in Intelisense angezeigt wird.

Auch gibt es Bücher, die die Prinzipien und die Verwendung von Design by Contracts etwas genauer beschreiben? Eine Sache ist die Kenntnis der Syntax der Verwendung von Verträgen in einer Sprache (in diesem Fall C #), eine andere ist die Kenntnis der Verwendung und des Zeitpunkts. Ich habe mehrere Tutorials und Jon Skeets C # in Depth-Artikel darüber gelesen, aber ich würde gerne ein bisschen tiefer gehen, wenn möglich.

Vielen Dan

Antworten auf die Frage(10)

Ihre Antwort auf die Frage