Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet400/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   396   397   398   399   400   401   402   403   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.20 .Исключения.и.управление.состоянием
// Вспомогательные методы: 
// [Conditional("CONTRACTS_FULL")] или [Conditional("DEBUG")]
public static void Assert(Boolean condition);
public static void Assume(Boolean condition);
// Инфраструктурное событие: обычно в коде это событие не используется
public static event EventHandler ContractFailed;
}
Как упоминалось ранее, многим из этих статических методов назначен атрибут 
[Conditional("CONTRACTS_FULL")]
, а некоторым методам класса 
Helper
— еще 
и атрибут 
[Conditional("DEBUG")]
. Это означает, что при отсутствии специаль-
ного символа, определенного в момент компиляции, компилятор проигнорирует 
любой написанный вами код вызова этих методов. Пометка 
Always
означает, что 
компилятор всегда будет создавать код вызова этих методов. Кроме того, методы 
Requires

Requires

Ensures

EnsuresOnThrow

Invariant

Assert
и 
Assume
дополнительно имеют перегруженные версии (здесь они не показаны), 
принимающие аргумент типа 
String
. В результате вы можете в явном виде задать 
сообщение, которое будет выводиться при нарушении контракта.
По умолчанию контракты служат только для документирования, и для их включе-
ния нужно вручную указать в свойствах проекта символическое имя 
CONTRACTS_FULL

Также вам могут потребоваться дополнительные инструменты и панель свойств 
Visual Studio, которые можно загрузить с сайта 
http://msdn microsoft com/en-us/
devlabs/dd491992 aspx
. В пакет Visual Studio эти инструменты пока не входят, так как 
являясь относительно новыми, они крайне быстро развиваются. И на сайте DevLabs 
новые версии появляются быстрее, чем в обновлениях Visual Studio. После загрузки 
и установки новых инструментов появится новая панель свойств (рис. 20.9).
Для включения контрактов кода установите флажок 
Perform
Runtime
Contract
Checking
и в расположенном справа от него раскрывающемся списке выберите 
вариант 
Full
. Это определяет символическое имя 
CONTRACTS_FULL
при построении 
проекта и активизирует необходимые инструменты (они кратко описаны далее) 
после его построения. В результате нарушение контракта во время выполнения 
программы будут сопровождаться событием 
ContractFailed
класса 
Contract

Обычно разработчики не регистрируют методов с этим событием, но если вы реши-
те изменить этой традиции, все зарегистрированные вами методы получат объект 
ContractFailedEventArgs
, который выглядит следующим образом:
public sealed class ContractFailedEventArgs : EventArgs {
public ContractFailedEventArgs(ContractFailureKind failureKind,
String message, String condition, Exception originalException);
public ContractFailureKind FailureKind { get; }
public String Message { get; }
public String Condition { get; }
public Exception OriginalException { get; }
public Boolean Handled { get; } // Верно, если хоть один обработчик 


549
Контракты.кода
// вызвал SetHhandled
public void SetHandled(); // Присваивает Handled значение true, 
// позволяя игнорировать нарушение
public Boolean Unwind { get; } // Верно, если хоть один обработчик 
// вызвал SetUnwind или threw
public void SetUnwind(); // Присваивает Unwind значение true, 
// принудительно генерируя ContractException
}

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   396   397   398   399   400   401   402   403   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish