基本的に、特定の必須事後条件をサブクラスに伝播するための仮想メソッドがあります。これは、単純化されたバージョンと、静的チェッカーが生成する奇妙な警告です (編集 - 私の例は不完全でした。それは今です):
public abstract class InitializerClass
{
protected bool _initialized
public bool IsInitialized
{
get { return _initialized; }
}
public virtual void Initialize()
{
//Warning CodeContracts: Missing precondition in an externally visible
//method. Consider adding Contract.Requires(this.IsInitialized); for
//parameter validation
Contract.Ensures(IsInitialized);
}
}
これは他のクラスです:
public abstract class OrderingClass
{
protected bool _ordered
public bool IsOrdered
{
get { return _ordered; }
}
public override void Initialize()
{
//Message CodeContracts: Suggested assume: Contract.Assume(this.IsOrdered);
Contract.Ensures(IsOrdered);
}
}
実際、両方の警告は、Contract.Ensure 呼び出しのすぐ下の行で、メソッドの閉じ中かっこを指しています。コードの何が問題になっていますか?