Так что же делают кодовые контракты C # 4.0? - PullRequest
15 голосов
/ 21 мая 2010

После прочтения о статическом классе System.Diagnostics.Contracts.Contract, на который повлияла потрясающая спецификация Spec #, я был взволнован и сразу же начал набивать свой код вызовами Contract.Requires() и Contract.Ensures().

Я полагаю, это просто потому, что мой код настолько супер-классный и не содержит ошибок, что проверка того, что эти вызовы действительно что-то сделали, просто не появилась до недавнего времени. Ошибка проскользнула, и я понял, что эти звонки ничего не делают! Я бы подумал, что они, по крайней мере, выдают исключение, когда условие нарушается, но не такая удача.

Я что-то упустил? Кто-нибудь знает, в чем дело, черт возьми?

Ответы [ 3 ]

17 голосов
/ 21 мая 2010

С Страница класса контракта на MSDN :

Вы должны использовать бинарный переписчик для вставить принудительное исполнение контракты. В противном случае контракты такие как метод Contract.Ensures может только тестируется статически и не будет генерировать исключения во время выполнения, если договор нарушен. Вы можете скачать двоичный рерайтер CCRewrite от Кодовые контракты в MSDN DevLabs Web сайт. CCRewrite поставляется с Visual Надстройка Studio, которая позволяет вам активировать принудительное выполнение контракта со страницы свойств проекта. бинарный переписчик и Visual Studio надстройка не поставляется с Visual Studio 2010 или Windows SDK.

2 голосов
/ 25 сентября 2013

Расширение ответа JSBangs:

Здесь необходимо установить флажок «Выполнить проверку контракта во время выполнения»:

enter image description here

(я также проверил «Статический»).Проверка> поле «Проверка статического контракта Peform»

0 голосов
/ 21 мая 2010

Если вы хотите, чтобы вызов .Requires выдавал ошибку, вам нужно установить опцию в настройках проекта или использовать .Requires<T> call

...