Пространство имен

В определенных контекстах программы требуется указания имени пространства. Полное имя пространства имен формируется из одного или более идентификаторов, разделенных точками.

Синтаксис

$ 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

Оператор Imports

Синтаксис

$ 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

См. также:

Описания и синтаксические правила | Особенности использования переменных в пространствах имен