TYPE(用户自定义类型)
来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgType 最后更新: 2025-03-24
声明用户自定义类型(结构/类)。
语法
基本形式:
Type typename
fieldname1 As DataType
fieldname2 As DataType
...
End Type完整形式(含 OOP 特性):
Type typename [Alias "alternatename"] [Extends base_typename] [Field = alignment]
[Private:|Public:|Protected:]
Declare Sub|Function|Constructor|Destructor|Property|Operator ...
Static variablename As DataType
Redim arrayname(dimensions) As DataType
fieldname As DataType [= initializer]
fieldname(dimensions) As DataType [= initializer]
fieldname(Any [, Any...]) As DataType
fieldname : bits As DataType [= initializer]
[Union]
fieldname As DataType
Type
fieldname As DataType
...
End Type
...
End Union
Type typename2
...
End Type
...
End Type说明
Type 声明包含一个或多个数据字段的自定义数据类型。支持的字段类型包括整数、浮点数、固定大小或动态数组、字符串、位域和其他 UDT。
OOP 支持:
- 继承:
Extends base_typename - 成员过程:
Sub、Function、Constructor、Destructor、Property、Operator - 静态成员变量
- 访问修饰符:
Public:、Private:、Protected: - 抽象方法和虚方法
内存布局: 字段按照原生对齐和填充规则在内存中顺序排列。Field = alignment 控制字段对齐。
可变长度数据: 动态字符串或数组成员使用描述符——数据不直接嵌入。要嵌入数据,请使用固定长度字符串或固定大小数组。
位域: 只能在 Type 或 Union 内部声明。位域成员打包在一起。
嵌套类型: 支持匿名或命名的嵌套 Type 和 Union 块(自 fbc 1.10.0 起)。
示例
示例 1:QB 风格类型
vb
Type clr
red As UByte
green As UByte
blue As UByte
End Type
Dim c As clr
c.red = 255
c.green = 128
c.blue = 64示例 2:位域用法
vb
Function UbyteToOctalString (ByVal b As UByte) As String
Union UbyteOctal
number As UByte
Type
d0 : 3 As UByte
d1 : 3 As UByte
d2 : 2 As UByte
End Type
End Union
Dim uo As UbyteOctal
uo.number = b
Return uo.d2 & uo.d1 & uo.d0
End Function版本
- 自 fbc 1.10.0 起添加嵌套命名类型/联合。
- 在 fbc 1.20.0 中更改了固定长度字符串行为(为了 QB 兼容性删除了额外的 null 终止符)。
方言差异
- OOP 特性需要
-lang fb方言。 - 在
-lang qb中,使用默认字节对齐。
与 QB 的区别
- 在 fbc 1.20.0 之前,UDT 中的固定长度字符串使用
size + 1字节(带 null 终止符),与 QB 的文件 I/O 格式不兼容。 - 自 fbc 1.20.0 起,固定长度字符串使用恰好
size字节(空格填充),与 QB 兼容。