声明一个命名空间块
语法
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()
方言差异
与QB差别
参考