В определенных контекстах программы требуется указания имени пространства. Полное имя пространства имён формируется из одного или более идентификаторов, разделенных точками.
Определение пространства имён состоит из ключевого слова 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 осуществляет импорт содержимого пространства имён из модулей/форм/сборок, на которые имеются ссылки в данной единице компиляции. Это позволяет использовать неквалифицированные идентификаторы при обращении к структурам, описанным в импортируемом пространстве имён.
В случае наличия в импортированном пространстве имён структуры, идентификатор которой совпадает с идентификатором, определенным внутри текущей единицы компиляции, то приоритет имеет структура определенная локально, а не импортированная.
Примечание. Оператор 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
См. также:
Руководство по языку Fore | Особенности использования переменных в пространствах имён