Декларирует блок пространства имен
Синтаксис
Namespace identifier [ Alias "aliasname" ]
заявления
End Namespace
Параметры
identifier
Имя пространства имен (в том числе вложенные имена
спецификатора).
aliasname
Альтернативное внешнее имя для пространства имен.
Описание
Пространства имен позволяют соединять группы объектов (предопределенные типы
данных и UDTs включая Union и Enum) и процедуры (в том числе их декларации)
под именем. Таким образом, глобальную область видимости можно разделить на "область
видимости процедуры", каждую со своим собственным именем.
Будет или нет явно объявлено имя в исходном файле, компилятор добавляет
пространство имен по умолчанию. Это безымянное имя, называется глобальным
пространством имен, присутствует в каждом файле.
Любой идентификатор в глобальном пространстве имен доступен для
использования в именованном пространстве имен (даже глобальные символы с тем
же именем, как ключевые слова могут быть объявлены внутри пространства
имен).
Пространства имен неявно имеют доступ
public и это
не является изменяемым.
Переменная, объявленная внутри пространства имен, всегда неявно статическая
и видна на протяжении всей программы даже если модификатор декларации
Shared
не указан (static и shared являются необязательными).
Пространства имен не оказывает никакого влияния на определение видимости.
Можно определить пространство имен в двух или более декларациях.
Пространства имен обычно используются в библиотеках, где вы не хотите ,
чтобы все символы из этой библиотеки были доступны в глобальном пространстве
имен.
Например, если вы используете библиотеку "Forms", можно определить тип Point
для описания координат X и Y, и вам хотелось бы его также определить для
других целей. Эту проблему можно решить путем создания пространства имен Forms
для библиотеки, а затем со ссылкой на его тип Point как Forms.Point,
получите доступ к вашему Point.
Для доступа к дублированным символам, определенным в глобальном пространстве
имен используйте:
.SomeSymbol (или
..SomeSymbol если
внутри блока
With..End With).
Пример
Namespace Forms
Type Point '' A 2D point
As Integer x
As Integer y
End Type
'' Так как мы находимся внутри
пространства имен, Point разрешено в Forms.Point.
Sub AdjustPoint( ByRef pt As Point, ByVal newx As Integer, ByVal newy As Integer )
pt.x = newx
pt.y = newy
End Sub
End Namespace
Type Point '' A 3D point
As Integer x
As Integer y
As Integer z
End Type
Sub AdjustPoint( ByRef pt As Point, ByVal newx As Integer, ByVal newy As Integer, ByVal newz As Integer )
pt.x = newx
pt.y = newy
pt.z = newz
End Sub
Dim pt1 As Point
AdjustPoint( pt1, 1, 1, 1 )
Dim pt2 As Forms.Point
Forms.AdjustPoint( pt2, 1, 1 )
Пространства имен являются GCC C++ совместимыми, следующий код направлен для
тестирования.
(cpp)
// mylib.cpp
// To compile:
// g++ -c mylib.cpp -o mylib.o
// ar rcs libmylib.a mylib.o
#include
#include
namespace mylib
{
int test()
{
return 123;
}
}
'' test.bas
Extern "c++" Lib "mylib"
Namespace mylib Alias "mylib"
Declare Function test() As Integer
End Namespace
End Extern
Print mylib.test()
Различия диалектов
- Пространства имен не поддерживаются в диалекте -lang qb.
Отличия от QB
См. также