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);
}
}
будет единственным способом исправить эту проблему.