Зависит от того, как вы используете. Требуется.
Если вы используете режим «Требуется специальный контракт»:
public void SomeMethod(SomeClass x)
{
if (x == null) throw new ArgumentNullException("x");
Contract.EndContractBlock();
...
}
Вы можете безопасно отключить проверки во время выполнения и сохранить проверки ошибок и исключения
Если вы используете режим «Требуется стандартный контракт»:
public void SomeMethod(SomeClass x)
{
Contract.Requires<ArgumentNullException>(x != null);
...
}
Вы должны повернуть проверки во время выполнения как минимум до уровня ReleaseRequires. В противном случае вы потеряете все проверки на ошибки и можете получить неожиданные исключения (например, NullReferenceException
где-то глубоко в коде вместо ArgumentNullException
на общедоступной поверхности)
Я бы не стал использовать более высокие уровни проверки по очень простой причине: если какой-либо контракт, кроме Contract.Requires<E>
, потерпит неудачу, среда выполнения выдаст System.Diagnostics.ContractException
, что, вероятно, не понравится пользователям.
Кстати, Хенк Холтерман абсолютно прав, что статический верификатор ограничен, и вы не должны полностью на него полагаться.