サーチ…
備考
コードコントラクトは、メソッドの前/後条件とオブジェクトの不変条件のコンパイルまたは実行時分析を可能にします。これらの条件は、呼び出し元と戻り値がアプリケーション処理の有効な状態に一致するようにするために使用されます。コード契約のその他の用途には、文書生成が含まれます。
前提条件
前提条件は、メソッドが入力パラメータに最低限必要な値を提供できるようにします
例...
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
有効にすることも考えてください。