Namespace
 
Декларирует блок пространства имен

Синтаксис

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

  • Новое в FreeBASIC

См. также