Проектирование по контрактам и конструкторам

Я реализую свой собственный ArrayList для школьных целей, но чтобы немного оживить ситуацию, я пытаюсь использовать C # 4.0 Code Contracts. Все было хорошо, пока мне не нужно было добавлять Контракты в конструкторы. Должен ли я добавить Contract.Ensures () в пустой конструктор параметров?

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

        _array = new T[capacity];
    }

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

Я бы сказал, да, у каждого метода должен быть четко определенный контракт. С другой стороны, зачем ставить, если это просто делегирование работы «главному» конструктору? Логично, мне не нужно было бы.

Единственный момент, когда я вижу, что было бы полезно явно определить контракт в обоих конструкторах, - это если в будущем у нас будет поддержка Intelisense для контрактов. Если это произойдет, было бы полезно четко указать, какие контракты имеет каждый метод, как это будет отображаться в Intelisense.

Кроме того, есть ли какие-нибудь книги, которые бы углублялись в принципы и использование Design в контрактах? Одно дело - знать синтаксис использования контрактов в языке (в данном случае C #), другое - знать, как и когда его использовать. Я прочитал несколько уроков и статью Джона Скита о C # в глубине, но я хотел бы пойти немного глубже, если это возможно.

Спасибо

Ответы на вопрос(5)

Ваш ответ на вопрос