Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 99
Текст из файла (страница 99)
Это не пробная экспериментальная версия. Присутствует во всех версиях. 514 Часть (. Язык С№ В данном примере идентификатор тн1АЬ не определен, и поэтому часть №е1зе второй условной последовательности кода не компилируется. Обратите внимание на то, что директива №е1эе обозначает конец блока директивы №г№ и в то же время — начало блока самой директивы №е1эе. Это необходимо потому что с любой директивой №11 может быть связана только одна директива №епс)11.
Более того, с любой директивой №11 может быть связана только одна директива №е1зе. Обозначение №е111 означает "иначе если", а сама директива №е111 определяет последовательность условных операций 1Г-е1зе-1г для многовариантной компиляции. После директивы №е111 указывается идентификаторное выражение. Если это выражение истинно, то компилируется следующий далее кодовый блок, а остальные выражения директивы №е111 не проверяются.
В противном случае проверяется следующий по пор)щку блок. Если же ни одну из директив №е111 не удастся выполнитгь то при наличии директивы №е1эе выполняется последовательность кода, связанная с этой директивой, а иначе не компилируется ни один из кодовых блоков директивы №11. Ниже приведена общая форма директивы №е1г1. №гт идентнфнкаторное аыраменне последовательность операторов №е111 идентнфикаторное аырамение последовательность операторов №е111 идентифнкаторное аыраменне последовательность операторов // . №епб11 В приведенном ниже примере демонстрируется применение директивы №е111.
// Продемонстрировать применение директивы №е111. №бетгпе КЕЬЕАЗЕ пэ1по Эуэсеы; с1ааэ Теяе ( згасгс чо1с( Маги() ( №11 ехрен1ментА( Сопэо1е.нггкеЬ1пе("Компилируется для экспериментальной версии.")) №е111 КЕЬЕАЭЕ Сопэо1е.нгзсеьгпе("Компилируется для окончательной версии.")г №е1яе Сопэо1е.нг1седзпе("Компилируется для внутреннего тестирования."); №епб1Г №11 тктА( ьа (НЕ(ЕАЗЕ Сопао1е.нг1кепхпе("Пробная версия."); №епб11 Сопэо1е.нггсеЬ1пе("Присутствует во всех версиях."); ) Глава 16. Пространства имен, препроаессор и сборки 515 Этот код выдает следующий результат: Компилируетая для окончательной версии.
Приаутствует во ваех версиях. Директива $ппйе Е С помощью директивы фппбеб удаляется определенный ранее идентификатор. Это, по существу, означает, что он становится "неопределенным". Ниже приведена обшая форма директивы Мипбеб. Еапбес идентификатор Рассмотрим следующий пример кода: Ебе11пе ЗНАЬЬ Е11 БИАЬЬ // ... Еппбет ЯМАЬЬ // теперь идентификатор ЯМАЬЬ не определен. После директивы фппбеб идентификатор ЯМАЬЬ уже оказывается неопределенным. Директива фппбеб применяется главным образом для локализации идентификаторов только в тех фрагментах кода, в которых они действительно требуются.
Директива $еггог Директива Фег саг вынуждает компилятор прервать компиляцию. Она служит в основном для отладки. Ниже приведена общая форма директивы фегда г. ееггог сообщение об ошибке Когда в коде встречается директива феггаг, выводится сообщение об ошибке. Например, когда компилятору встречается строка кода Ееггог Это тестовая ошибка! компиляция прерывается и выводится сообшение "это тестовая ошибка!". Директива $магпд.пд Директива фнагп1па действует аналогично директиве феггаг, за исключением того, что она выводит предупреждение, а не ошибку.
Следовательно, компиляция не прерывается. Ниже приведена общая форма директивы фнагп1па. Енагп1пр лредулреклашщее сообщение Директива $1хпе Директива ф11пе задает номер строки и имя файла, содержащего эту директиву. Номер строки и имя файла используются при выводе ошибок или предупреждений во время компиляции. Киже приведена обшая форма директивы Ф11пе. Е11пе номер "имя файла" 516 Часть !. Язьж С№ Имеются еще два варианта директивы №11пе.
В первом из них она указывается с ключевым словом с!ейап11, обозначающим возврат нумерации строк в исходное состояние, как в приведенном ниже примере. №11пе сетад11 А во втором варианте директива №11пе указывается с ключевым словом п1г!г!еп. При пошаговой отладке программы строки кода, находящиеся между директивой №1гпе Ь1гЫеп и следующей директивой №11пе без ключевого слова и 1гЫеп, пропускаются отладчиком. Директивы $гедхоп и $епйгед~оп С помощью директив №гед№сп и №епг!гед1оп определяется область, которая разворачивается или сворачивается при структурировании исходного кода в интегрированной среде разработки У!зца! 81пг!!о. Ниже приведена общая форма этих директив.
№гед1оп текст // последовательность кода №епг!гед1оп текст где текст обозначает необязательную символьную строку. Директива $ртаува С помощью директивы №ргадма инструкции задаются компилятору в виде опций. Ниже приведена общая форма этой директивы. №ргадиа опция где опция обозначает инструкцию, передаваемую компилятору.
В версии Сй 3.0 предусмотрены две опции для директивы №ргадва. Первая из них, иагпьпд, служит для разрешения или запрета отдельных предупреждений со стороны компилятора. Она принимает две формы: №ргадиа нагпгпд г!1эаъ1е предупреядения №ргадиа нагпгпд геэсоге предупрендения где предупреждения обозначает разделяемый запятыми список номеров предупреждений. Для отмены предупреждения используется опция с!1эаЬ1е,адля его разрешения— опция геэсоге. Например, в приведенной ниже директиве №ргадиа запрещается выдача предупреждения №168, уведомляющего о том, что переменная объявлена, но не используется. №ргадиа иагпгпд с1аавте 168 Второй для директивы №ргадва является опция спескэпль Она служит для формирования контрольной суммы в проектах АКР!чЕТ.
Ниже приведена ее общая форма. №ргадтпа пьесками "имя файла" "! оо1п!" "контрольная сумма" где нмя файла обозначает конкретное имя файла; сг/го — глобально уникальный идентификатор, с которым связано имя файла; контрольная сумма — шестнадцатеричное число, представляющее контрольную сумму. У этой контрольной суммы должно быть четное число цифр. Глава 16. Пространства имен, препроцессор и сборки 617 Сборки и модификатор доступа хп~ехпа1 Сборка является неотъемлемой частью программирования на С№. Она представляет собой один или несколько файлов, содержаших все необходимые сведения о развертывании программы и ее версии. Сборки составляют основу среды .НЕТ.
Они предоставляют механизмы для надежного взаимодействия компонентов, межъязыковой возможности взаимодействия и управления версиями. Кроме того, сборки определяют область действия программного кода. Сборка состоит из четырех разделов. Первый раздел представляет собой декларацию сборки. Декларация содержит сведения о самой сборке. К этой информации относится, в частности, имя сборки, номер ее версии, сведения о соответствии типов и параметры культурного характера. Второй раздел сборки содержит метаданные типов, т.е. сведения о типах данных, используемых в программе. Среди прочих преимуществ метаданные типов способствуют межъязыковой возможности взаимодействия.
Третий раздел сборки содержит программный код в формате МБП. (М!сгозобг 1псегшед!асе Еапцпаце — промежуточный язык корпорации М1сгозобг). И четвертый раздел сборки содержит ресурсы, используемые программой. Правда, при программировании на С№ сборки получаются автоматически, требуя от программирующего лишь минимальных усилий. Дело в том, что исполняемый файл, создаваемый во время компиляции программы на С№, на самом деле представляет собой сборку, содержащую исполняемый код этой программы, а также другие виды информации.
Таким образом, когда компилируется программа на С№, сборка получается автоматически. У сборок имеется много других особенностей, и с ними связано немало актуальных вопросов программирования, но, к сожалению, их обсуждение выходит за рамки этой книги. Ведь сборки являются неотъемлемой частью процесса разработки программного обеспечения в среде .НЕТ, но формально они не относятся к средствам языка С№. Тем не менее в С№ имеется одно средство, непосредственно связанное со сборкой.
Это модификатор доступа 1пгегпа1, рассматриваемый в следующем разделе. Модификатор доступа хп~егпа1 Помимо модификаторов доступа рпь11с, рг1уаге н ргогесгеф использовавшихся в представленных ранее примерах программ, в С№ предусмотрен также модификатор доступа 1псегпа1. этот модификатор определяет доступность члена во всех файлах сборки и его недоступность за пределами сборки. Проще говоря, о члене, обозначенном как 1пгегпа1, известно только в самой программе, но не за ее пределами. Модификатор доступа 1пгегпа1 особенно полезен для создания программных компонентов.
Модификатор доступа 1псегпа1 можно применять к классам и их членам, а также к структурам и членам структур. Кроме того, этот модификатор разрешается использовать в объявлениях интерфейсов и перечислений. из модификаторов ргогесгег1 и йпсегпа1 можно составить спаренный модификатор доступа ргосесгео упгегпа1. Уровень доступа ргосесгеб йпгегпа1 может быть задан только для членов класса. Член, объявленный как ргогесгео йпгегпа1, доступен лишь в пределах собственной сборки или для производных типов. Ниже приведен пример применения модификатора доступа 1псегпа1.
О Использовать модификатор доступа ьпсегпа1. извод Яузсез; 51В Часть (. Язык С№ с1асв 1пкегпа1тевк ( гпгегпа1 1пг хт ) с1авв гпсегпа1пеио ( всасгс чо1о Магд() ( тпкегпа1тевк оЬ = пен гпкегпа1тевк() оЬ.х = 10) // доступно, ибо находится в тои же файле Сопво1е.ыг1кев1пе("Значение оЬ.х: " + оЬ.х)т В классе 1псегпа1теас поле х объявляется как 1псегпа1. Это означает, что оно доступно в самой программе, но, как показывает код класса 1псегпа10екпо, недоступно за пределами программы. ГЛАВА Динамическая идентификация типов, рефлексия и атрибуты этой главе рассматриваются три эффективных средства; динамическая идентифика- В ция типов, рефлексия и атрибуты.