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

Пространства имен упорядочивают объекты, определенные в сборке.Сборки могут содержать несколько пространств имен, которые, в свою очередь, могут содержать другие пространства имен.Пространства имен предотвращают неоднозначность и упрощают ссылки при использовании больших групп объектов, таких как библиотеки классов.

Например, .NET Framework определяет класс ListBox в пространстве имен System.Windows.Forms.В следующем фрагменте кода показано, как объявить переменную с помощью полного имени этого класса:

Dim LBox As System.Windows.Forms.ListBox

Предотвращение конфликтов имен

Пространства имен .NET Framework разрешают проблему, иногда называемую загрязнением пространства имен (namespace pollution), состоящую в том, что у разработчика библиотеки классов возникают проблемы с использованием одинаковых имен в разных библиотеках.Такие конфликты с существующими компонентами иногда называют конфликтами имен (name collisions).

Например, если создается новый класс с именем ListBox, то можно использовать его внутри проекта без уточнения.Однако, если требуется использовать класс .NET Framework ListBox в том же самом проекте, в ссылке должно быть указано полное имя, чтобы она была уникальной.Если эта ссылка не является уникальной, то Visual Basic выведет сообщение об ошибке, уведомляющее о неоднозначности имени.В следующем примере кода показано, как следует объявлять эти объекты:

' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox

На следующем рисунке показаны две иерархии пространства имен, в каждой из которых содержится объект с именем ListBox.

Иерархия пространства имен

По умолчанию каждый исполняемый файл, создаваемый с Visual Basic, содержит пространство имен проекта с тем же самым именем, что и имя проекта.Например, если в проекте определяется объект с именем ListBoxProject, то исполняемый файл ListBoxProject.exe содержит пространство имен с именем ListBoxProject.

Несколько сборок могут использовать одно и то же пространство имен.В Visual Basic они рассматриваются как единый набор имен.Например, можно определять классы в пространстве имен с именем SomeNameSpace в сборке с именем Assemb1 и определять дополнительные классы для того же пространства имен из сборки с именем Assemb2.

Полные имена

Полные имена — это ссылки для объектов, содержащие префикс, в качестве которого служит имя пространства имен, в котором объект определен.Можно использовать объекты, определенные в других проектах, если создана ссылка на соответствующий класс (путем выбора команды Добавить ссылку в меню Проект), а затем в коде программы использовать полное имя объекта.В следующем фрагменте кода показано, как следует использовать полное имя объекта из пространства имен другого проекта:

Dim LBC As New ListBoxProject.Form1.ListBox

Полные имена предотвращают конфликты имен, так как они дают компилятору возможность определить используемый объект.Однако эти имена могут получиться длинными и громоздкими.Чтобы избежать этого, можно при помощи оператора Imports определить псевдоним — сокращенное имя, которое можно использовать вместо полного имени.Например, в следующем фрагменте кода создаются псевдонимы для двух полных имен, которые используются для определения двух объектов.

Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox

Если в оператор Imports псевдоним не включен, то можно использовать все имена в данном пространстве имен без указания полного имени при условии, что они являются уникальными в данном проекте.Если проект содержит оператор Imports для пространств имен, которые включают в себя элементы с одинаковыми именами, необходимо указывать полное имя при использовании этих элементов.Предположим, проект содержал следующие два оператора Imports:

' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2

При попытке использовать Class1 без его полного имени Visual Basic возвращает ошибку неоднозначности имени Class1.

Операторы уровня пространства имен

В пространстве имен можно определить такие элементы, как модули, интерфейсы, классы, делегаты, перечисления, структуры, а также другие пространства имен.Невозможно определить на уровне пространства имен такие элементы, как свойства, процедуры, переменные и события.Эти элементы должны быть объявлены внутри контейнеров, таких как модули, структуры или классы.

Global - ключевое слово-литерал в полных именах

Если определена вложенная иерархия пространств имен, доступ к коду внутри иерархии может быть заблокирован для пространства имен System .NET Framework.В следующем примере иллюстрируется иерархия, в которой пространство имен SpecialSpace.System блокирует доступ к System.

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As System.Int32
                Dim n As System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

В результате компилятор Visual Basic не может успешно разрешить ссылку на System.Int32, поскольку SpecialSpace.System не определяет Int32.Можно использовать ключевое слово Global для запуска цепочки квалификации на уровне внешней библиотеки классов .NET Framework.Это позволяет указать пространство имен System или любое другое пространство имен в библиотеке классов.Это показано в приведенном ниже примере.

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As Global.System.Int32
                Dim n As Global.System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

Можно использовать Global для доступа к другим корневым уровням пространства имен, например Microsoft.VisualBasic, а также к другим пространствам имен, связанным с проектом.

Global - ключевое слово в выписках пространства имен

Можно также использовать ключевое слово Global в A. Оператор NamespaceЭто позволяет определить пространство имен из корневого пространства имен проекта.

Все пространства имен, содержащихся в проекте, основанных на пространство имен для проекта.Visual Studio задает имя проекта как корневое пространство имен по умолчанию для всего кода в проекте.Например, если проект называется ConsoleApplication1, его элементы программирования относятся к пространству имен ConsoleApplication1.При объявлении Namespace Magnetosphere, то ссылки на Magnetosphere в проекте имеют доступ к ConsoleApplication1.Magnetosphere.

В следующих примерах используется ключевое слово Global для объявления пространства имен из корневое пространство имен для проекта.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

В объявлении пространства имен, Global не могут быть вложенными в другом пространстве имен.

Можно использовать Страница "Приложение" в конструкторе проектов (Visual Basic) для просмотра и изменения Корневое пространство имен проекта.Для новых проектов, Корневое пространство имен по умолчанию относится к имени проекта.Чтобы вызвать Global быть пространством имен верхнего уровня можно очистить запись Корневое пространство имен так, что в поле будет пустым.Расчистка Корневое пространство имен удаляет необходимость ключевого слова Global в объявлениях пространств имен.

Если оператор Namespace объявляет имя, которое также пространство имен платформы .NET Framework, пространство имен платформы .NET Framework, становится недоступен, если не используется ключевое слово Global в полном имени.Для доступа к этому пространству имен платформы .NET Framework без использования ключевого слова Global можно включить ключевое слово Global в выписке Namespace.

В следующем примере имеет ключевое слово Global в объявлении пространства имен System.Text.

Если ключевое слово Global не присутствовало в объявлении пространства имен, то StringBuilder не удалось получить доступ к без указания Global.System.Text.StringBuilder.Для ConsoleApplication1 с именем проекта, ссылки на System.Text, что и к ConsoleApplication1.System.Text если ключевое слово Global не использовалось.

Module Module1
    Sub Main()
        Dim encoding As New System.Text.TitanEncoding

        ' If the namespace defined below is System.Text
        ' instead of Global.System.Text, then this statement
        ' causes a compile-time error.
        Dim sb As New System.Text.StringBuilder
    End Sub
End Module

Namespace Global.System.Text
    Class TitanEncoding

    End Class
End Namespace

См. также

Задачи

Практическое руководство. Создание и использование сборок с помощью командной строки (C# и Visual Basic)

Ссылки

Оператор Imports (пространство имен .NET и тип)

ListBox

System.Windows.Forms

Основные понятия

Сборки и глобальный кэш сборок (C# и Visual Basic)

Ссылки и оператор Imports (Visual Basic)

Написание кода в решениях Office