CodeContracts错误地标记基础构造函数

时间:2015-05-27 09:15:19

标签: c# code-contracts constructor-chaining

假设我有以下类层次结构:

public class FooBase
{
    private readonly object _obj;

    protected FooBase(object obj)
    {
        Contract.Requires(obj != null);
        _obj = obj;
    }
}

public class Foo : FooBase
{
    public Foo(object obj) : base(obj)
    {
    }
}

编译时,Foo会出现以下CodeContracts错误:

Error   12  CodeContracts: Missing precondition in an externally visible method. Consider adding Contract.Requires(obj != null); for parameter validation

有没有办法让CodeContracts认识到验证已经在基类中发生了?

1 个答案:

答案 0 :(得分:0)

不幸的是没有。 你的Foo在没有正确要求的情况下调用FooBase(obj)。

public class FooBase
{
    private readonly object _obj;

    protected FooBase(object obj)
    {
        Contract.Requires(obj != null);
        _obj = obj;
    }
}

public class Foo : FooBase
{
    public Foo(object obj) : base(obj)
    {
        Contract.Requires(obj != null);
    }
}

是解决此问题的唯一方法。