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

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

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

В случае наличия в импортированном пространстве имён структуры, идентификатор которой совпадает с идентификатором, определенным внутри текущей единицы компиляции, то приоритет имеет структура определенная локально, а не импортированная.

Примечание. Оператор 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 | Особенности использования переменных в пространствах имён