Я использую свой собственный ArrayList для школьных целей, но для того, чтобы немного подправить вещи, я пытаюсь использовать контракты на код C# 4.0. Все было в порядке, пока мне не пришлось добавлять Контракты к конструкторам. Должен ли я добавлять 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.
Кроме того, есть ли какие-нибудь книги вокруг, которые идут немного глубже в отношении принципов и использования Проекта по контрактам? Одна вещь - знание синтаксиса использования Контрактов на языке (C# в данном случае), другое - знание того, как и когда его использовать. Я прочитал несколько уроков и статью о нем в статье «С # в глубине» Джона Скита, но я хотел бы пойти немного глубже, если это возможно.
Благодаря
связаны: http://stackoverflow.com/questions/2539497/code-contracts-do-we-have-to-specify-contract-requires-statements-redundant/2626997 – porges
Вы могли бы избавиться от «Контракта. Требуется (емкость> 0); если вы сделаете c'tor, возьмите uint, противоположный int. Я пытаюсь использовать Контракты в качестве последнего средства, где язык ограничивает вашу способность позволить следующему разработчику знать, о чем вы думали, когда вы создали код в первую очередь. Если вы решите сохранить контракт, я бы написал «Contract.Requires (capacity> = 0)»; поскольку всегда нужно иметь возможность создавать пустую структуру данных, а затем иметь возможность добавлять объекты позже. –
«... в будущем у нас есть поддержка Intelisense для контрактов». Будущее - сегодня! http://visualstudiogallery.msdn.microsoft.com/1ec7db13-3363-46c9-851f-1ce455f66970 –