Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на 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

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

ShowDeleted
Событие OnNeedData
Создание отчетов из кода
Печать простых графических фигур
Инструментальные средства автоматизированного рабочего места
Объекты
Компонент TQRSysData
Свойство ExportFilter
GetIndexNames
Свойство Description
Свойство ColumnTopPosition
Процедурные типы
Свойство RecordCount
Плавающая запятая в BASM
Гипертекстовые и мультимедийные информационные технологии
| 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


     



Rambler's Top100

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

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