В определенных контекстах программы требуется указания имени пространства. Полное имя пространства имен формируется из одного или более идентификаторов, разделенных точками.
$ NamespaceDeclaration = NAMESPACE ident
NamespaceMemberList;
END NAMESPACE ident ";"
$ NamespaceMemberList = [ NamespaceMember { NamespaceMember }]
$ MemberDeclaration = (NamespaceDeclaration | ClassDeclaration | InterfaceDeclaration | VariableDeclaration | ConstDeclaration | ProcedureDeclaration | FunctionDeclaration | EnumDeclaration | DelegateDeclaration)
Определение пространства имен состоит из ключевого слова Namespace, за которым следует идентификатор пространства имен и его тело, и завершающееся последовательностью ключевых слов End Namespace <ident>. Определение пространства имен может быть произведено как на верхнем уровне внутри модуля (формы), так и внутри другого пространства имен. Когда определение пространства имен производится на верхнем уровне внутри единицы компиляции, данное пространство имен становится членом глобального пространства имен (Global Scope). Когда определение пространства имен производится внутри другого пространства имен, вложенное пространство имен становится членом объемлющего. В обоих случаях наименование пространства имен должно быть уникальным внутри объемлющего пространства имен. Пространства имен всегда имеют режим доступа Public и их определения не могут содержать модификаторов доступа.
Пространства имен являются расширяемыми, два определения пространств имен с одинаковыми полностью квалифицированными именем пополняют одно пространство определений.
Все члены, описанные в рамках пространства имен с одним квалифицированным именем должны иметь уникальные наименования. Данное правило распространяется также на члены, описанные в глобальном пространстве имен Global Scope. Пространство имен Global Scope является глобальным для всех единиц компиляции в рамках одной сборки.
Описание пространств имен:
Namespace A
Class MyClass: Object
Public Sub Run;
Begin
B.Proc1;
B.Proc2;
Proc4;
End Sub Run;
Sub Proc4;
Begin
Debug.WriteLine("Выполнена процедура Proc4");
End Sub Proc4;
End Class MyClass;
Namespace B
Sub Proc1;
Begin
Debug.WriteLine("Выполнена процедура A.B.Proc1");
End Sub Proc1;
Sub Proc2;
Begin
Debug.WriteLine("Выполнена процедура A.B.Proc2");
End Sub Proc2;
End Namespace B;
Namespace B
Sub Proc3;
Begin
Debug.WriteLine("Выполнена процедура A.B.Proc3");
End Sub Proc3;
End Namespace B;
End Namespace A;
Sub Main;
Var
MyVar: A.MyClass;
Begin
MyVar := New A.MyClass.Create;
MyVar.Run;
A.B.Proc3;
End Sub Main;
После выполнения примера в консоль среды разработки будут выведены сообщения в следующем порядке:
Module execution started
Выполнена процедура A.B.Proc1
Выполнена процедура A.B.Proc2
Выполнена процедура Proc4
Выполнена процедура A.B.Proc3
Module execution finished
$ ImportsDeclaration = IMPORTS ident ";"
Оператор Imports осуществляет импорт содержимого пространства имен из модулей/форм/сборок, на которые имеются ссылки в данной единице компиляции. Это позволяет использовать неквалифицированные идентификаторы при обращении к структурам, описанным в импортируемом пространстве имен.
В случае наличия в импортированном пространстве имен структуры, идентификатор которой совпадает с идентификатором, определенным внутри текущей единицы компиляции, то приоритет имеет структура определенная локально, а не импортированная.
Примечание. Оператор Imports импортирует все структуры, объявленные с модификатором доступа Public, кроме вложенных пространств имен. Для обращения к вложенным пространствам имен и их содержимому необходимо использовать квалифицированные идентификаторы.
Использование оператора Imports.
Содержимое первого модуля:
Namespace Space1
Public Sub Proc1;
Begin
Debug.WriteLine("Выполнена процедура Proc1 из Space1");
End Sub Proc1;
Sub Proc2;
Begin
Debug.WriteLine("Выполнена процедура Proc2 из Space1");
End Sub Proc2;
Namespace SubSpace
Public Sub SubProc;
Begin
Debug.WriteLine("Выполнена процедура SubProc из Space1.SubSpace");
Proc2;
End Sub SubProc;
End Namespace SubSpace;
End Namespace Space1;
Содержимое второго модуля:
Imports Space1;
Sub Proc1;
Begin
Debug.WriteLine("Выполнена процедура Proc1 из текущего модуля");
End Sub Proc1;
Sub Main;
Begin
Space1.Proc1;
Proc1;
Space1.SubSpace.SubProc;
End Sub Main;
Во втором модуле в инспекторе сборок добавлена ссылка на первый модуль. После выполнения примера в консоль среды разработки будут выведены сообщения в следующем порядке:
Module execution started
Выполнена процедура Proc1 из Space1
Выполнена процедура Proc1 из текущего модуля
Выполнена процедура SubProc из Space1.SubSpace
Выполнена процедура Proc2 из Space1
Module execution finished
См. также:
Описания и синтаксические правила | Особенности использования переменных в пространствах имен