CodeContracts错误标记基构造函数中已经存在的缺失前提条件

本文关键字:存在 条件 前提 错误 构造函数 CodeContracts | 更新日期: 2023-09-27 17:50:54

假设我有如下的类层次结构:

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)
    {
    }
}

当我编译时,我得到以下CodeContracts错误为Foo:

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

是否有任何方法使CodeContracts认识到验证已经发生在基类中?

CodeContracts错误标记基构造函数中已经存在的缺失前提条件

遗憾的是没有。您的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);
    }
}

是解决这个问题的唯一方法。