В чем смысл Code Contracts?

236
06 мая 2017, 19:03

В чем смысл Code Contracts?

Со стороны похожи на на Assert'ы.

Где-то вычитал, что они помогают генерировать документацию. Только это их единственное преимущество?

Вроде, если я правильно понял, то и в Runtime производится проверка выполнения контрактов. Но в чем их преимущество перед стандартными if?

Исходники .NET напичканы этими контрактами.

Answer 1

Боюсь этот вопрос выходит за рамки Stackowerflow, вы хотите чтобы вам сюда кусок текста из литературы кинули? Прочитайте хотя бы у Албахари главу 13 - большая ее часть посвящена контрактам. Если уж после чтения останутся какие-то конкретные вопросы - тогда уже можно будет их задать.

Обзор контрактов кода

Ранее мы упоминали о концепции утверждения, посредством которого осуществляется проверка того, что определенное условие удовлетворяется повсюду в программе. Если условие нарушается, то это указывает на ошибку, которая обычно обрабатывается путем запуска отладчика (в отладочных сборках) или генерации исключения (в окончательных сборках).

Утверждения следуют принципу, что если уж произошла ошибка, то лучше сообщить об этом как можно раньше и ближе к ее источнику. Обычно это предпочтительнее попытки продолжить с недействительными данными, которая может привести к неправильным результатам, неожиданным побочным эффектам или генерации исключения позже в программе (все это гораздо труднее диагностировать).

Исторически существуют два пути принудительного применения утверждений:

• вызов метода Assert на объекте типа Debug или Trace;

• генерация исключений (таких как ArgumentNullException).

В .NET Framework 4.0 появилось новое средство под названием контракты кода, которое заменяет оба подхода унифицированной системой. Эта система позволяет делать не только простые утверждения, но также и более мощные утверждения, основанные на контрактах.

Контракты кода порождены от принципа контрактного программирования (Design bу Contract) на языке Eiffel, при котором функции взаимодействуют друг с другом через систему взаимных обязательств и преимуществ. По существу функция указывает предусловия, которые должны быть удовлетворены клиентом (вызывающим компонентом), и в ответ гарантирует соблюдение постусловий, от которых может зависеть клиент, когда функция завершится.

Типы для контрактов кода находятся в пространстве имен System.Diagnostics.Contracts.

READ ALSO
Возможно ли стирать объекты в Graphics? (c#)

Возможно ли стирать объекты в Graphics? (c#)

Здравствуйте! Есть Bitmap, к которому я привязал графикуВот нарисовал я, скажем, на этом Bitmap'e круг

229
bot framework and office 365 email

bot framework and office 365 email

Я создал Бота, который должен отвечать на сообщения, направленные на email office 365 for businessНо бот не видит сообщения, направленные на этот ящик

217
Меню при щелчке правой кнопкой мыши

Меню при щелчке правой кнопкой мыши

Как при щелчке ПКМ по исполняемому exe файлу (собранному в visual studio на c#) к стандартному контекстному меню (свойства, копировать, изменить и тд) добавить...

268
Как добавлять информацию в xml-файл

Как добавлять информацию в xml-файл

Есть вот такая база данныхДобавляю несколько полей в DGV, а потом мне нужно в обработчике событие(Import in XML) все те данные что были в DGV импортировать...

301