Union
 
声明一个联合用户定义的类型。

语法

Union typename
fieldname as datatype
Declare member function declaration ...
...
End Union

参数

typename
Union的名称
fieldname
数据字段成员的名称
member function declaration
任何支持的成员函数

说明

工会类似于Type结构,除了组合的元素占用内存中相同的空间。
与类型类似,联盟可以使用可选的Field = number 说明符,并通过使用扩展关键字来支持继承。
与Type不同,Union不能包含可变长度的字符串,更多的是包含构造函数或析构函数的字段(或不具有基数)。
联盟的大小是最大数据项的大小。数据项可以是未命名的Type.由于它们占据相同的空间,所以只能使用一个元素。

联盟支持会员功能,包括ConstructorDestructorFunctionOperatorPropertySub.联盟的所有成员都是公共的,不支持访问控制。

嵌套的未命名类型或联合不能拥有过程成员或静态数据成员(对本地命名类型/联合体的限制)。

可以将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


方言差异

  • 仅在-lang fb 方言中才支持与联盟块内定义的功能对象相关的功能。
  • -lang qb 方言中不可用,除非使用别名__联盟引用。

与QB差别

  • 新的FreeBASIC

参考