Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 291

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 285 286 287 288 289 290 < 291 > 292 293 294 295 296 297 .. 404 >> Следующая


Console.WriteLine ("This string only displays in Debug') i

)

ЯИЕЙ

СолУгЛ»

Ccxitffmtxx, rttfttQf-'r J

2j Co^ncrt FVOf^U*

Si Canfi>r4tan fiopcto b MJ tW*j»rq «г*ч:е*

Исходный текст для этого примера найдите в директории Chapter22/Conditional. В программе создается экземпляр класса Testconditianal внутри статической функции Main. Затем вызывается метод DebugOniy, который зависит от атрибута Conditional, Это функция просто выводит текстовую строку на консоль.

При компиляции исходного файла на C# можно определять флажки в командной строке. Атрибут conditional запрещает вызов зависящего от флажка метода при отсутствии соответствующего флажка.

Флажок DEBUG будет установлен автоматически, если вы компилируете отладочную версию в Visual Sladio.NET. Если вы хотите определить или переопределить какие-либо флажки для конкретного проекта, то необходимо открыть диалоговое окно, позволяющее задавать свойства проекта с помощью опции Build в разделе Configuration Properties, как показано на рисунке слева.

Заметьте, что по умолчанию при построении отладочной версии предполагается определение флажков DEBUG н TRACE.

Для определения флажка в командной строке необходимо воспользоваться переключателем /л-. {сокращение от /define: можно при желании набрать всю строку полностью);

csc /d:DEBUG /rSystem.dll conditional.es

Если откомпилировать и запустить файл с использованием указанной командной строки, то на консоли можно увидеть следующий выходной поток:

This siring only displays in Debug

(Это строка выводится только в отладочном режиме)

wu^iua fib* ГЛ4
Cbmudi im Art'Ovprffr^Lhjbfl&w
¦ILki- LaDCU 1шЬш
E ум - — v*
Гр*^ ftjsAjEffVf .Wtmrtftlfwd*
ШЛШ

»t D«tiWJUnNt


[СмйМСвцуиймСтиг!!
h ¦¦¦¦* flrt 1**^ IQ ({МПГ.1 rfnwMtan. Офкшш)

~| I

Hrti |

Если откомпилировать программу без определения флага DEBUG в командной строке, то программа ничего не выведет.

Для того чтобы стало более понятно, что именно происходит в создаваемом коде, просмотрите его с помощью iidasm {см, рис, справа).

f са[|<М1оги1.№С - IL DASm

Fie Vim Hdp

в-О condtional.exe j- > MANIFEST S-® TeslConditional

— > , class private auto ansi beloieliekJinit .clot; vokffi DebugQnfc*: voidU

F

?

Man: vcid(;i(irvc|]|

assembly oornSbonai

il
622

Глава 22

Еслн флажок DEBUG не задан, то для метода Main о генерируется следующий IL-код:

.method private hidebysig static void Main(string[] args) cil managed {

.ontrypoint // Code size 7 {0x7)

.maxstack 1

.locals (class TestConditional V_0)

IL_0000: newobj instance void TestConditionalctor()

IL_D0D5: stloc.O ¦

IL_0006: ret ) // end of the method TestConditional: :Main

Этот код просто создает экземпляр объекта TestConditional (il_0Q00), помещает его в локальную переменную и производит возврат.

Если при компиляции будет задан переключатель /d: debug, то будет сгенерирован код, приведенный ниже:

.method private hidebysig static void Main(string[] args) cil managed {

.entrypoint

// Code size 13 (Oxd)

.maxstacfc 1

.locals (class TestConditional V_D)

IL_0000: newobj instance void TestConditionalctor()

IL_0QQ5: stloc.O IL_0QQ6! ldloc.0

IL_OOQ7: callvirt instance void TestConditional::DebugOnly()

IL_000c: ret ) // end of the method TestConditional::Main

В этот код дополнительно включены две выделенные строки, в которых происходит вызов метода по условию. Использование conditional приводит к удалению строк, ответственных за вызов метода, но не самого метода.

1

Атрибут conditional может использоваться только для тех методов, которые ничего не возвращают (описатель void), в противном случае удаление обращения к такому методу будет означать, что не возвращено i никакого значения. Существует возможность сделать зависимым от атрибута ! метод, который обладает параметрами типа ref или out; в этом случае эти переменные просто сохранят свое первоначальное значение.

Атрибут System.ObsoleteAttribute

Включение описания этого атрибута в новую книгу по новому языку программирования может показаться на первый взгляд странным, хотя, на самом деле, это свидетельствует о том, какое внимание разработчики компании Microsoft уделили .NET. С помощью атрнбуга obsolete может помечаться класс, метод или любое другое вхождение модуля, которое больше не используется.

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

623

Скажем, в версии 10 вашего приложения есть следующий класс: public class Developer'

<

public Developer I)

(

) ’

public void OriginalMethod () '

{

J ~

}

Вы компилировали и использовали этот класс на протяжении нескольких лет, однако теперь появляется нечто более новое:
Предыдущая << 1 .. 285 286 287 288 289 290 < 291 > 292 293 294 295 296 297 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.