Если хотите, чтобы начать использовать Microsoft Code Contracts, я однажды написал в блоге об этом .Этот пост охватывает самые базовые предпосылки, постусловия и инварианты.
Как краткое изложение понятий, вы можете думать о них следующим образом:
- Предварительным условием является то, что должно быть верно до выполнения метода - что клиенты обещают вашему методу.
- Инвариант - это то, что должно всегда оставаться публично истинным, когда речь идет о клиентах вашего класса.
- Постусловие - это то, что должно быть верно после выполнения метода - что ваш метод обещает клиентам.
Итак, для моей стопки, легкая мысль, о которой можно подумать, может быть инвариантом.Если вы моделируете стек с помощью массива, вы можете объявить инвариант в классе, что массив никогда не устанавливается равным нулю, например, вы бы определили инвариантный метод:
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(elements != null);
}
Это выглядит таку вас уже есть предварительное условие для вашего метода pop - вы хотите сказать, что пользователь должен убедиться, что стек не пуст, когда он выполняет pop.Итак, в начале метода pop у вас будет:
Contract.Requires(size > 0);
И, наконец, вы можете указать пост-условие для pop, этот размер всегда будет меньше, чем был до операции pop(вы можете получить более конкретную информацию, если хотите):
Contract.Ensures(Contract.OldValue<int>(size) > size);
Удачи вам в этом - контракты классные и полезные.Это очень чистый способ кодирования.