Я использую свой собственный ArrayList для школьных целей, но для того, чтобы немного оживить вещи, я пытаюсь использовать С# 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 by Contracts? Одна вещь - знание синтаксиса использования Контрактов на языке (С# в данном случае), другое - знание того, как и когда его использовать. Я прочитал несколько уроков и статью о нем в статье "Глубина", но я хотел бы пойти немного глубже, если это возможно.
Спасибо