.NET Framework
Кодовые контракты
Поиск…
замечания
Кодовые контракты позволяют компилировать или анализировать временные условия методов и инвариантных условий для объектов. Эти условия могут использоваться для обеспечения того, чтобы вызывающие и возвращаемые значения соответствовали действительным состояниям для обработки приложений. Другие виды использования кодовых контрактов включают в себя создание документации.
Предпосылками
Предварительные условия позволяют методам предоставлять минимальные требуемые значения для входных параметров
Пример...
void DoWork(string input)
{
Contract.Requires(!string.IsNullOrEmpty(input));
//do work
}
Результат статического анализа ...
Постусловия
Постусловия гарантируют, что возвращаемые результаты метода будут соответствовать предоставленному определению. Это предоставляет вызывающему абоненту определение ожидаемого результата. Постусловия могут допускать упрощенные импликации, поскольку некоторые возможные результаты могут быть предоставлены статическим анализатором.
Пример...
string GetValue()
{
Contract.Ensures(Contract.Result<string>() != null);
return null;
}
Результат статического анализа ...
Контракты для интерфейсов
Используя Кодовые контракты, можно заключить договор с интерфейсом. Это делается путем объявления абстрактного класса, который связывает интерфейсы. Интерфейс должен быть помечен атрибутом ContractClassAttribute
а определение контракта (абстрактный класс) должно быть помечено атрибутом ContractClassForAttribute
Пример C # ...
[ContractClass(typeof(MyInterfaceContract))]
public interface IMyInterface
{
string DoWork(string input);
}
//Never inherit from this contract defintion class
[ContractClassFor(typeof(IMyInterface))]
internal abstract class MyInterfaceContract : IMyInterface
{
private MyInterfaceContract() { }
public string DoWork(string input)
{
Contract.Requires(!string.IsNullOrEmpty(input));
Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()));
throw new NotSupportedException();
}
}
public class MyInterfaceImplmentation : IMyInterface
{
public string DoWork(string input)
{
return input;
}
}
Результат статического анализа ...
Установка и включение кодовых контрактов
Хотя System.Diagnostics.Contracts
включен в .Net Framework. Чтобы использовать Кодовые контракты, вы должны установить расширения Visual Studio.
В разделе « Extensions and Updates
найдите « Code Contracts
затем установите Code Contracts Tools
« Code Contracts Tools
После установки инструментов вы должны включить Code Contracts
в свое решение Project. Как минимум, вы, вероятно, захотите включить Static Checking
(проверьте после сборки). Если вы реализуете библиотеку, которая будет использоваться другими решениями, вы можете также рассмотреть возможность включения Runtime Checking
.