Описание тега code-contracts

Code Contracts - это проект Microsoft с открытым исходным кодом, который позволяет выражать предварительные условия, постусловия и утверждения непосредственно в коде.

Code Contracts - это проект Microsoft с открытым исходным кодом, созданный на основе Microsoft Research, который позволяет выражать предварительные условия, постусловия и утверждения непосредственно в коде.

Проверка в контракте кода - это проверка, которая, если код правильный, всегда должна возвращать истину. Другими словами: он не должен проверять, доступна ли база данных или ввел ли пользователь пустую строку - это внешние факторы. Кодовые контракты нужны только для того, чтобы убедиться, что ваш код правильный и поддерживает его инварианты.

Таким образом, обычно вы выполняете проверку входных параметров в общедоступных методах, явно проверяя значение и затем генерируя исключение, если оно выходит за пределы допустимого диапазона. Но для частных методов, которые вызываются только другим кодом и поэтому могут ожидать определенных предварительных условий, входные параметры можно проверить с помощью Code Contracts.

private void MyMethod(string machineId, int age)
{
    Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(machineId));
    Contract.Requires<ArgumentOutOfRangeException>(machineId.StartsWith("PEK"));
    Contract.Requires<ArgumentOutOfRangeException>(age > 16);
    //...
}

Пост-условия - это выражения, которые должны быть истинными после завершения метода. Типичный пример - проверка того, что выходные данные функции никогда не равны нулю или что они находятся в определенном диапазоне.

private string MachineNameOf(int id)
{
    Contract.Requires<ArgumentOutOfRangeException>(id > 100);
    Contract.Ensures(Contract.Result<string>() != null);
    //...
}

GitHub: https://github.com/Microsoft/CodeContracts

Инструменты по адресу: http://visualstudiogallery.msdn.microsoft.com/1ec7db13-3363-46c9-851f-1ce455f66970.

См. Также (исторический): http://research.microsoft.com/en-us/projects/contracts.