サーチ…


備考

コードコントラクトは、メソッドの前/後条件とオブジェクトの不変条件のコンパイルまたは実行時分析を可能にします。これらの条件は、呼び出し元と戻り値がアプリケーション処理の有効な状態に一致するようにするために使用されます。コード契約のその他の用途には、文書生成が含まれます。

前提条件

前提条件は、メソッドが入力パラメータに最低限必要な値を提供できるようにします

例...

void DoWork(string input)
{
    Contract.Requires(!string.IsNullOrEmpty(input));

    //do work
}

静的解析の結果...

ここに画像の説明を入力

事後条件

事後条件は、メソッドから返された結果が、指定された定義と一致することを保証します。これは、呼び出し元に期待される結果の定義を提供します。ポストコンディションでは、静的解析ツールによっていくつかの可能な結果が提供されるため、簡単なインプリメントが可能です。

例...

string GetValue()
{
    Contract.Ensures(Contract.Result<string>() != null);

    return null;
}

静的解析結果...

ここに画像の説明を入力

インタフェースの契約

コードコントラクトを使用すると、インタフェースにコントラクトを適用することができます。これは、インタフェースを暗示する抽象クラスを宣言することによって行われます。インタフェースはContractClassAttributeでタグ付けされ、 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有効にする必要があります。最低限、 Static Checking (ビルド後のチェック)を有効にしたいと思うかもしれません。他のソリューションで使用されるライブラリを実装する場合は、 Runtime Checking有効にすることも考えてください。

プロジェクト設定



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow