* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Поиск пространства имен
15 апреля 2009

В модуле могут объявляться (подключаться) другие модули, от которых этот модуль
зависит. Как и для платформы Win32, компилятор Delphi 8 для .NET должен иденти-
фицировать эти модули. В случае с явным объявлением имен путь всегда известен, но если это групповой модуль, то компилятор должен определить область поиска подклю-
ченных модулей. Рассмотрим следующий пример модуля с явным объявлением про-
странства имен и подключенными модулями (для чего используется директива uses).
unit MyCompany.Programs.Units.MyUnitl;
uses MyCompany.Libs.Unit2, Unit3, Unit4;
Здесь модуль MyUnitl является членом пространства имен MyCompany. Programs .Units.
Модуль MyUnitl зависит от трех других модулей: модуля Unit2 в пространстве имен
MyCompany.Libs и двух групповых модулей Unit3 и Unit4.
Компилятор может легко установить полное имя модуля Unit2, но для нахожде-
ния полных имен модулей Unit3 и Unit4 компилятор должен произвести поиск сре-
ди соответствующих пространств имен. Для поиска используются источники: опции
компилятора, объявленные в файле проекта пространства имен, пространства имен по
умолчанию и, наконец, текущее пространство имен для данного модуля.
В файле проекта можно дополнительно определить список пространства имен по-
иска для групповых модулей. Объявление пространства имен должно происходить
сразу после объявления программы, библиотеки или пакета и перед всеми другими
конструкциями или блоками. Пространства имен в списке разделяются запятыми
и список должен заканчиваться точкой с запятой.
Компилятор будет производить поиск в следующем порядке:
• текущее пространство имен модуля;
• пространство имен по умолчанию;
• список пространства имен проекта;
• пространства имен, указанные в опциях компилятора.
Ниже приведен пример файла проекта и модуля с объявлением списка про-
странств имен для поиска файла.
// Файл проекта.
program MyCompany.Programs.MyProgram;
namespaces MyCompany.Libs.UlWidgets, MyCompany.Libs.Network;
// Файл модуля.
unit MyCompany.Programs.Units.MyUnitl;
Используя эти объявления, компилятор будет производить поиск в следующем
порядке:
• MyCompany.Programs.Units;
• MyCompany.Programs;
• MyCompany.Libs.Network;
• MyCompany.Libs.UlWidgets;
• Пространство имен, указанное в опциях компилятора.
Если модуль является групповым (т.е. не имеет явно объявленного пространства имен),
то поиск начинается с пространства имен по умолчанию. Подключение модулей можно
производить как с полностью указанным пространством имен, так и с указанием только
группового имени, при этом удостоверившись, что компилятор сможет найти модуль.
В примере ниже показано, как можно подключить модули.
unit MyCompany.Libs.MyUni11
uses MyCompany.Libs.Unit2, // Полностью указанное имя.
UnitX; // Групповое имя.
При этом в программе можно обращаться к элементам модуля как по полному
имени, так непосредственно по имени элемента. uses MyCompany.Libs.Unit2;
begin
writeln(MyCompany.Libs.Unit2.SomeString);
writeln(SomeString);
end.
При использовании полного имени необходимо включать имя целиком.
writeln(Unit2.SomeString); // Ошибка!
writeln(Libs.Unit2.SomeString); // Ошибка!
writeln(MyCompany.Libs.Unit2.SomeString); // Правильно.
writeln(SomeString); // Правильно.
Ссылка только на часть пространства имен при подключении модулей также будет
ошибкой.
uses MyCompany; // Ошибка!
Чтобы не набирать очень длинные имена, можно объявлять псевдонимы и исполь-
зовать их локально в модуле. Сделать это можно так.
uses MyCompany.AVeryLongNamespaceDesignation.VeryDescriptiveUnitName as aUnit;
После чего на имя можно ссылаться с помощью псевдонима. Ниже приведены два
эквивалентных утверждения.
writeln(aUnit.SomeString);
writeln(MyCoirpany.AVeryLongNamespaceDesignation.VeryDescriptiveUnitName.SomeString);
Как получить информацию
Мы рассмотрим различные возможности платформы .NET с использованием про-
странства имен и содержащихся в них типов, но в одной книге невозможно описать все
пространства имен. Необходимо уметь находить информацию о нужных типах и простран-
ствах имен самостоятельно. Удобнее всего использовать для этого утилиту ildasm.exe,
о которой уже упоминалось выше, хотя есть и другие средства получения необходимых
сведений. Например, с .NET SDK поставляются утилиты ildasm, classview И wincv.
Дизассемблер ildasm.exe
Официальное название ildasm.exe можно перевести как "утилита дизассембли-
рования промежуточного языка". В дальнейшем будем ее называть просто
"дизассемблером". Эта утилита позволяет просмотреть содержимое любой сборки
.NET (файла с расширением . d l l или .ехе). Можно изучить манифест, метаданные
типов и инструкции IL. При этом все операции производятся с использованием дру-
жественного графического интерфейса. Просто запустите ildasm.exe и с помощью
команды меню File^Open откройте нужную сборку. Ранее эта утилита уже использо-
валась для просмотра сборки Sum (см. рис. 2.2 и 2.3).
Как видно, структура сборки представлена в самом обычном формате с деревом
и узлами. Каждый метод, свойство, вложенный класс, как и все остальные типы,
представлены специальными значками (в текстовом дампе дизассемблера эти значки
будут заменены на аббревиатуры, состоящие из трех символов).
Помимо просмотра информации о типах и их членах, ildasm позволяет получать
сведения о командах IL, относящихся к выбранному типу.
Дизассемблер ildasm обладает замечательной возможностью выгружать иерархию
исследуемой сборки в текстовый файл, после чего полученный дамп можно изучать
в удобной обстановке. Чтобы создать текстовый дамп, откройте нужную сборку, в ме-
ню File выберите команду Dump TreeView и укажите имя для создаваемого текстового файла. Обратите внимание, что графические значки будут заменены соответствующи-
ми текстовыми аббревиатурами.
В файл можно выгружать не только типы и члены типов исследуемой вами
сборки, но и относящийся к объектам сборки код IL. Для этого в ildasm предна-
значена другая команда: FileoDump. По умолчанию для дампов с инструкциями IL
используется расширение * . h.
В дизассемблере ildasm есть еще одна удобная возможность. С помощью ildasm
можно просматривать метаданные типов, т.е. ту информацию о типах сборки, кото-
рую генерирует компилятор для среды исполнения .NET. Для просмотра метаданных
типов достаточно загрузить сборку в ildasm и нажать клавиши <Ctrl+M>.

Теги: borland delphi vista, borland delphi, SendTo, Windows Borland Delphi

Статьи по теме:

Свойство OutputBin
OnLanguageWarning
Ключевые слова
Метод Print
Признаки автоматизированных рабочих мест. Классификация автоматизированных рабочих мест
AbsolutePath
Программное обеспечение электронного офиса
Панель Desktop
Программы для работы с e-mail
Основные принципы создания пользовательского интерфейса
Свойство PageNumber
Свойство Stretch
Базы данных, СУБД, дифференциальные файлы
Delphi 8
Настольные издательские системы
| Borland Delphi | vitek |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | Borland Delphi | Поиск пространства имен. Регион сайта: Москва и Санкт-Петербург