Таким образом, контракты на код С# 4.0 на самом деле ничего не делают?

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

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

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

Ответы

Ответ 1

От страница класса договора на MSDN:

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

Ответ 2

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

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

enter image description here

(Я также проверил флажок "Статическая проверкa > Проверка статического контракта" )

Ответ 3

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