CodeContracts ложно отмечает отсутствующее предусловие, которое уже существует в базовом конструкторе

Скажем, у меня есть следующая иерархия классов:

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 распознавать, что проверка уже происходит в базовом классе?

1 ответ

К сожалению нет. Ваш 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);
    }
}

будет единственным способом исправить эту проблему.

Другие вопросы по тегам