После чтения о System.Diagnostics.Contracts.Contract
статический класс, который был под влиянием великолепия Spec#, к которому я был взволнован и сразу начал перчить свой код вызовами Contract.Requires()
и Contract.Ensures()
.
Я предполагаю, что это просто, потому что мой код является настолько суперпотрясающим и без ошибок, что проверка, что те вызовы на самом деле сделали что-то просто, не подходила до недавнего времени. Ошибка проскользнула через, и я пришел к пониманию, что эти вызовы ничего не делают! Я думал бы, что они, по крайней мере, выдают исключение, когда условие нарушено, но никакая такая удача.
Я пропускаю что-то? Кто-либо знает, какого черта точка?
Из на странице класса контрактов в MSDN :
Для вставить принудительное исполнение во время выполнения контракты.В противном случае контракты такие поскольку метод Contract.Ensures может проверяться только статически и не будет генерировать исключения во время выполнения, если договор нарушен. Вы можете скачать двоичный перезаписчик CCRewrite из Кодовые контракты в MSDN DevLabs Web сайт. CCRewrite поставляется с Visual Надстройка Studio, позволяющая активировать принудительное исполнение контракта на странице свойств проекта. В двоичный перезаписчик и Visual Studio надстройка не поставляется с Visual Studio 2010 или Windows SDK.
Если вы хотите, чтобы вызов .Requires
выдавал ошибку, вам необходимо установить опцию в настройках проекта или использовать .Requires
call