Вот моя проблема. Я очень большой поклонник Дизайна по контракту, я использую эту концепцию, особенно при разработке библиотек, которые могут использоваться другими разработчиками. Я только что обнаружил новый способ сделать это: Contract.Requires
вместо Exception
:
Итак, вместо:
public void SomeMethod(string name){
if(name==null) throw new NullArgumentException("Null values not supported");
}
у меня теперь есть:
public void SomeMethod(string name){
Contract.Requires(name != null);
}
РЕДАКТИРОВАТЬ : я работаю под VS2010 в режиме отладки.
Проблема: Contract.Requires
ничего не делает, даже если name
равно null
!
В документации MSDN говорится:
Задает контракт предварительного условия для включающего метода или свойства .
Но ничего не указано в случае невыполнения условия!
Я также заметил, что существуют другие Contract.Requires
перегрузки, которые вызывают исключение, отображают сообщение ... но тогда что такое Contract.Requires (Boolean)
для?
РЕДАКТИРОВАТЬ В приведенном ниже ответе подчеркивается, что для использования всех возможностей Contract
API необходимо установить подключаемый модуль, но как насчет пользователей Mono, которые хотят, чтобы их код вел себя одинаково на разных платформах?