Namespace
 
声明一个命名空间块

语法

Namespace identifier [ Alias "aliasname " ]
statements
End Namespace

参数

identifier
命名空间的名称(包括嵌套名称说明符)。
aliasname
命名空间的备用外部名称。

说明

命名空间允许将对象(预定义数据类型和UDT,包括联盟和枚举)和过程(包括其声明)分组在一个名称下。这样,全局范围可以分为“子范围”,每个范围都有自己的名称。

无论是否在源文件中显式声明了命名空间,编译器都会添加一个默认的命名空间。这个未命名的名称空间,称为全局命名空间,存在于每个文件中。
全局命名空间中的任何标识符都可以在命名空间中使用(甚至可以在命名空间中声明与关键字名称相同的全局符号)。

命名空间隐含地具有公共访问权限,这是不可修改的。
即使声明修饰符共享未被指定(静态和共享是可选的,但这可能会提高代码可读性),在整个程序中声明的一个变量总是在整个程序中隐式静态和可见。
命名空间对define的可见性没有任何影响。
可以在两个或多个声明中定义一个命名空间。

命名空间通常用于库中,您不希望该库中的所有符号占用用户空间(称为全局命名空间)。
例如,如果您使用“Forms”库,则可以定义用于描述X和Y坐标的Point类型,您也可以将其定义为另一目的。这可以通过创建库的命名空间表单来解决,然后将它的Point类型称为Forms.Point,而将其作为Point。

要访问全局命名空间中定义的重复符号,请使用:.SomeSymbol(或..SomeSymbol如果在随着块内)。

例子

Namespace Forms
    Type Point ''2D点
        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 ''一个3D点
    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

参考