В чем смысл Code Contracts?
Со стороны похожи на на Assert'ы.
Где-то вычитал, что они помогают генерировать документацию. Только это их единственное преимущество?
Вроде, если я правильно понял, то и в Runtime производится проверка выполнения контрактов. Но в чем их преимущество перед стандартными if?
Исходники .NET напичканы этими контрактами.
Боюсь этот вопрос выходит за рамки Stackowerflow
, вы хотите чтобы вам сюда кусок текста из литературы кинули? Прочитайте хотя бы у Албахари главу 13 - большая ее часть посвящена контрактам. Если уж после чтения останутся какие-то конкретные вопросы - тогда уже можно будет их задать.
Обзор контрактов кода
Ранее мы упоминали о концепции утверждения, посредством которого осуществляется проверка того, что определенное условие удовлетворяется повсюду в программе. Если условие нарушается, то это указывает на ошибку, которая обычно обрабатывается путем запуска отладчика (в отладочных сборках) или генерации исключения (в окончательных сборках).
Утверждения следуют принципу, что если уж произошла ошибка, то лучше сообщить об этом как можно раньше и ближе к ее источнику. Обычно это предпочтительнее попытки продолжить с недействительными данными, которая может привести к неправильным результатам, неожиданным побочным эффектам или генерации исключения позже в программе (все это гораздо труднее диагностировать).
Исторически существуют два пути принудительного применения утверждений:
• вызов метода Assert
на объекте типа Debug
или Trace
;
• генерация исключений (таких как ArgumentNullException
).
В .NET Framework 4.0
появилось новое средство под названием контракты кода, которое заменяет оба подхода унифицированной системой. Эта система позволяет делать не только простые утверждения, но также и более мощные утверждения, основанные на контрактах.
Контракты кода порождены от принципа контрактного программирования (Design bу Contract
) на языке Eiffel
, при котором функции взаимодействуют друг с другом через систему взаимных обязательств и преимуществ. По существу функция указывает предусловия, которые должны быть удовлетворены клиентом (вызывающим компонентом), и в ответ гарантирует соблюдение постусловий, от которых может зависеть клиент, когда функция завершится.
Типы для контрактов кода находятся в пространстве имен System.Diagnostics.Contracts
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Есть Bitmap, к которому я привязал графикуВот нарисовал я, скажем, на этом Bitmap'e круг
Я создал Бота, который должен отвечать на сообщения, направленные на email office 365 for businessНо бот не видит сообщения, направленные на этот ящик
Как при щелчке ПКМ по исполняемому exe файлу (собранному в visual studio на c#) к стандартному контекстному меню (свойства, копировать, изменить и тд) добавить...
Есть вот такая база данныхДобавляю несколько полей в DGV, а потом мне нужно в обработчике событие(Import in XML) все те данные что были в DGV импортировать...