Skip to content

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
  • 成员过程:SubFunctionConstructorDestructorPropertyOperator
  • 静态成员变量
  • 访问修饰符:Public:Private:Protected:
  • 抽象方法和虚方法

内存布局: 字段按照原生对齐和填充规则在内存中顺序排列。Field = alignment 控制字段对齐。

可变长度数据: 动态字符串或数组成员使用描述符——数据不直接嵌入。要嵌入数据,请使用固定长度字符串或固定大小数组。

位域: 只能在 TypeUnion 内部声明。位域成员打包在一起。

嵌套类型: 支持匿名或命名的嵌套 TypeUnion 块(自 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 兼容。

另请参阅

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系