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