Поиск…


замечания

Кодовые контракты позволяют компилировать или анализировать временные условия методов и инвариантных условий для объектов. Эти условия могут использоваться для обеспечения того, чтобы вызывающие и возвращаемые значения соответствовали действительным состояниям для обработки приложений. Другие виды использования кодовых контрактов включают в себя создание документации.

Предпосылками

Предварительные условия позволяют методам предоставлять минимальные требуемые значения для входных параметров

Пример...

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 .

Настройки проекта



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow