Skip to content

用户自定义类型 (User Defined Types)


自定义类型。

概述

用户自定义类型(UDT) 是程序员可以创建的特殊变量。用户自定义类型本质上只是一个容器,包含一组其他变量,类似于数组,但与数组不同,UDT 可以包含_不同_的变量类型(而数组始终包含_相同_类型的多个变量)。事实上,UDT 甚至可以在其内部包含过程

成员

存储在 UDT 中的不同变量和/或过程称为"成员",或更一般地称为项目。成员可以是几乎任何类型的变量,包括数值类型、字符串、指针枚举,甚至数组。在 UDT 中创建变量的方式与正常创建变量的方式基本相同,只是 Dim 关键字是可选的。UDT 成员通过.运算符访问,例如,如果在 UDT 中创建了一个名为 someVar 的变量,则可以通过 UDT 变量名称后跟".someVar"来访问它。以下是一个示例:

start GeSHi

vb
' 定义一个名为 myType 的 UDT,包含一个名为 someVar 的整型成员
Type myType
  As Integer someVar
End Type

' 创建该类型的一个变量
Dim myUDT As myType

' 将成员 someVar 设为 23,然后在屏幕上显示其内容
myUDT.someVar = 23
Print myUDT.someVar

end GeSHi

注意 Type...End Type 实际上并不创建该类型的变量,它只定义该类型变量包含什么内容。必须创建该类型的变量才能实际使用它!

UDT 指针

UDT 指针,顾名思义,是指向 UDT 的指针。它们的创建方式与普通指针类似,但使用方式有所不同。要访问指针所指向的 UDT 的成员,使用->) 运算符。例如,如果 myUDTPtr 是指向有成员 someVar 的 UDT 的指针,则可以通过 myUDTPtr->someVar 来访问该成员,这是等价的但更简洁的 (*myUDTPtr).someVar 的简写形式。

start GeSHi

vb
Type rect
    x As Integer
    y As Integer
End Type

Dim r As rect
Dim rp As rect Pointer = @r

rp->x = 4
rp->y = 2

Print "x = " & rp->x & ", y = " & rp->y
Sleep

end GeSHi

UDT 实例化

创建 UDT 的对象时:

  • 只有非静态数据成员会为每个对象实例引发特定的内存分配,

  • 静态数据成员只为 UDT 分配一次,因此对所有对象实例是共享的,

  • 过程成员也只为 UDT 定义一次,其代码不会为每个对象实例复制(即使是非静态过程成员也是如此)。

这就是为什么在任何过程成员中声明的静态变量只为 UDT 分配一次。

因此,该静态变量确实是持久的,但被执行该代码的所有 UDT 实例共享(它不是特定于实例的变量)。

参见

返回 目录

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