Читая о Code Contracts, я не могу понять их цель - PullRequest
1 голос
/ 02 августа 2020

Я начал читать контракты кода в c#, но, несмотря на все объяснения предварительных условий и постусловий, они не упоминают, что они на самом деле ДЕЛАЮТ.

Проверяют ли они или ограничения, которые в случае сбоя во время выполнения вызывают исключение?

Проверяют ли они время разработки, которые вызывают предупреждения или ошибки, если их условия не выполняются?

1 Ответ

1 голос
/ 03 августа 2020

Функция контрактов кода (теперь заброшенная) в C# фактически выполняла любой из этих двух вариантов в зависимости от того, как он был настроен и какую версию Visual Studio вы использовали.

Основная цель контрактов кода должно было доказать, что определенные состояния программы невозможны ни при каком исполнении. Это доказательство должно было быть выполнено во время компиляции. Основная причина этих доказательств - убедиться, что программа верна. В идеале, однако, это также позволило бы удалить любые проверки времени выполнения, связанные с невозможными состояниями программы, что повысило бы производительность.

Иногда такого рода доказательства были невозможны, и ограничения были бы реализованы как обычные (время выполнения ) утверждения. Систему можно настроить так, чтобы все ограничения также проверялись во время выполнения.

Кроме того, систему также можно настроить так, чтобы игнорировать все ограничения.

Код контрактов был создан после компиляции stage с помощью программы перезаписи, которая работает с кодом IL, выводимым компилятором. Таким образом, исходный вывод компилятора будет одинаковым независимо от того, как была настроена система контрактов кода.

...