C#4.0 Кодируют Контракты, На самом деле Делают Что-нибудь?

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

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

Я пропускаю что-то? Кто-либо знает, какого черта точка?

15
задан George Mauer 21 May 2010 в 16:18
поделиться

2 ответа

Из на странице класса контрактов в MSDN :

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

17
ответ дан 1 December 2019 в 03:52
поделиться

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

0
ответ дан 1 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: