Поделиться через


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

Обновлен: Ноябрь 2007

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

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

Dim LBox As System.Windows.Forms.ListBox

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

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

Например, если создается новый класс с именем ListBox, то можно использовать его внутри проекта без уточнения. Однако если требуется использовать класс .NET FrameworkListBox в том же самом проекте, то в ссылке должно быть указано полное имя, чтобы она была уникальной. Если эта ссылка не является уникальной, то 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.

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

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

zt9tafza.alert_note(ru-ru,VS.90).gifПримечание.

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

См. также

Задачи

Практическое руководство. Создание и использование сборок

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

Сборки

Ссылки и оператор Imports

Ссылки

Global

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

ListBox

System.Windows.Forms

Другие ресурсы

Сведения об изменениях в языке (для пользователей Visual Basic 6.0)