Пространства имен в 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.
Операторы уровня пространства имен
В пространстве имен можно определить такие элементы, как модули, интерфейсы, классы, делегаты, перечисления, структуры, а также другие пространства имен. Невозможно определить на уровне пространства имен такие элементы, как свойства, процедуры, переменные и события. Эти элементы должны быть объявлены внутри контейнеров, таких как модули, структуры или классы.
Примечание. |
---|
Если определена вложенная иерархия пространств имен, то код внутри этой иерархии может быть заблокирован из классов других пространств имен с тем же именем. Например, если определить пространство имен System в пространстве имен SpecialSpace, то члены пространства имен .NET Framework System будут недоступны, если только полностью не квалифицировать члены ключевым словом Global. Дополнительные сведения см. в разделе Global. |
См. также
Задачи
Практическое руководство. Создание и использование сборок
Основные понятия
Ссылки
Оператор Imports (пространство имен .NET и тип)
Другие ресурсы
Сведения об изменениях в языке (для пользователей Visual Basic 6.0)