Ответ 1
Раздел 5.1 (Подтверждение аргументов и контракты) документа подробно описывает три основных режима использования, которые вы можете использовать для использования Контрактов:
- Подтверждение аргументов через Контракты только в сборках Debug, а не в сборках релизов.
- Проверка также в версиях выпуска.
- Пользовательская проверка аргументов в версиях выпуска, Контракты только в сборках Debug.
Таким образом, существует хотя бы один режим использования, в котором вы должны использовать Контракты в сборках выпусков, по крайней мере, в качестве официальной документации.
Цитата:
Прежде чем вы начнете использовать контракты в своем собственном коде, вам нужно принять несколько решений, которые влияют на то, какие формы контракта использовать для проверки аргументов и где (см. рис. 2). Обратите внимание, что вы можете принимать эти решения самостоятельно для каждой управляемой сборки, которую вы производите (каждый проект):
Проще всего использовать инструменты контракта, если вы решите, что вам не нужно выполнять проверку аргументов во время выполнения в сборках релизов (использование 1). В этом случае вы используете инструменты контракта во время разработки, но не на отгруженных битах. Помните, что вы можете отправить ссылочную сборку контракта вместе с вашими разрядными битами, чтобы клиенты могли проверять время выполнения проверки параметров на своих сборках отладки через call-сайт, требующие проверки.
Второй самый простой подход, если вам нужна проверка аргументов в вашей версии сборки, - это включить проверку контрактов во всех сборках (использование 2). Поэтому вы используете инструменты для создания строк времени выполнения ваших условий и для выполнения наследования контракта для вас. Вы можете выбрать конкретные исключения для проверки параметров или иметь стандартное исключение ContractException. Риск использования инструментов контракта в вашей версии сборки заключается в том, что вы зависите от инструментов, которые не достигли уровня качества продукции.
Самая сложная комбинация заключается в том, что вы хотите проверить правильность в сборках релизов, но вы используете инструмент контракта для проверки выполнения только в сборках отладки, но не в сборке выпуска (использование 3). В этом случае вы должны продолжить запись своей аргументации так, как вы уже это сделали, а именно с помощью команд if-then-throw (мы называем их устаревшими). Если вы хотите, чтобы они были доступны для поиска, добавьте другие контракты (например, "Гарантии" ) после них или используйте Contract.EndContractBlock(), если нет других контрактов. Обратите внимание: поскольку вы не используете инструменты проверки выполнения во время сборки сборки, вы не получите никакого наследования контрактов, и вам придется вручную повторить свое наследие - требует переопределений и реализации интерфейса. Для интерфейса и абстрактных методов вы все равно получаете наибольшее значение, если вы пишете контрактные классы с нормальными требованиями и обеспечиваете формы, чтобы вы могли проверять свои сборки отладки, и они появляются в сборках ссылок на контракт и, таким образом, отображаются зависимыми проектами и статическими шашками.
Это также указывает на то, что альтернативой, использующей только другие части фреймворка, будет: Обычный способ использования if-then-throw.