声明一个联合用户定义的类型。
语法
参数
typename
Union的名称
fieldname
数据字段成员的名称
member function declaration
任何支持的成员函数
说明
工会类似于
Type结构,除了组合的元素占用内存中相同的空间。
与类型类似,联盟可以使用可选的
Field = number 说明符,并通过使用
扩展关键字来支持继承。
与Type不同,Union不能包含可变长度的字符串,更多的是包含构造函数或析构函数的字段(或不具有基数)。
联盟的大小是最大数据项的大小。数据项可以是未命名的
Type.由于它们占据相同的空间,所以只能使用一个元素。
联盟支持会员功能,包括
Constructor,
Destructor,
Function,
Operator,
Property和
Sub.联盟的所有成员都是公共的,不支持访问控制。
嵌套的未命名类型或联合不能拥有过程成员或静态数据成员(对本地命名类型/联合体的限制)。
可以将
Union作为用户定义的类型传递给重载的运算符函数。
例子
'示例1:位域。
Type unitType
Union
Dim attributeMask As UInteger
Type '32位的uinteger最多可以支持32个属性。
isMilitary : 1 As UInteger
isMerchant : 1 As UInteger
End Type
End Union
End Type
Dim myunit As unitType
myunit.isMilitary = 1
myunit.isMerchant = 1
Print myunit.isMilitary '结果:1。
Print myunit.isMerchant '结果:1。
Print myunit.attributeMask '结果:3。
Sleep
'实施例2。
'定义我们的联盟
Union AUnion
a As UByte
b As Integer
End Union
'定义复合类型。
Type CompType
s As String * 20
ui As Byte '告诉我们联合使用什么。
Union
au As UByte
bu As Integer
End Union
End Type
'标志让我们知道在工会中使用什么。
'您只能使用联合的单个元素。
Const IsInteger = 1
Const IsUByte = 2
Dim MyUnion As AUnion
Dim MyComposite As CompType
'只能联合设置一个值。
MyUnion.a = 128
MyComposite.s = "类型+联盟"
MyComposite.ui = IsInteger '告诉我们这是一个整数联合。
MyComposite.bu = 1500
Print "联盟:";MyUnion.a
Print "综合:";
If MyComposite.ui = IsInteger Then
Print MyComposite.bu
ElseIf MyComposite.ui = IsUByte Then
Print MyComposite.au
Else
Print "未知类型"
End If
Sleep
方言差异
与QB差别
参考