用户自定义类型 (User Defined Types)
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgUDTs
- 最后更新: 2020-10-05
自定义类型。
概述
用户自定义类型(UDT) 是程序员可以创建的特殊变量。用户自定义类型本质上只是一个容器,包含一组其他变量,类似于数组,但与数组不同,UDT 可以包含_不同_的变量类型(而数组始终包含_相同_类型的多个变量)。事实上,UDT 甚至可以在其内部包含过程!
成员
存储在 UDT 中的不同变量和/或过程称为"成员",或更一般地称为项目。成员可以是几乎任何类型的变量,包括数值类型、字符串、指针、枚举,甚至数组。在 UDT 中创建变量的方式与正常创建变量的方式基本相同,只是 Dim 关键字是可选的。UDT 成员通过.运算符访问,例如,如果在 UDT 中创建了一个名为 someVar 的变量,则可以通过 UDT 变量名称后跟".someVar"来访问它。以下是一个示例:
start GeSHi
' 定义一个名为 myType 的 UDT,包含一个名为 someVar 的整型成员
Type myType
As Integer someVar
End Type
' 创建该类型的一个变量
Dim myUDT As myType
' 将成员 someVar 设为 23,然后在屏幕上显示其内容
myUDT.someVar = 23
Print myUDT.someVarend GeSHi
注意 Type...End Type 实际上并不创建该类型的变量,它只定义该类型变量包含什么内容。必须创建该类型的变量才能实际使用它!
UDT 指针
UDT 指针,顾名思义,是指向 UDT 的指针。它们的创建方式与普通指针类似,但使用方式有所不同。要访问指针所指向的 UDT 的成员,使用->) 运算符。例如,如果 myUDTPtr 是指向有成员 someVar 的 UDT 的指针,则可以通过 myUDTPtr->someVar 来访问该成员,这是等价的但更简洁的 (*myUDTPtr).someVar 的简写形式。
start GeSHi
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
Sleepend GeSHi
UDT 实例化
创建 UDT 的对象时:
只有非静态数据成员会为每个对象实例引发特定的内存分配,
静态数据成员只为 UDT 分配一次,因此对所有对象实例是共享的,
过程成员也只为 UDT 定义一次,其代码不会为每个对象实例复制(即使是非静态过程成员也是如此)。
这就是为什么在任何过程成员中声明的静态变量只为 UDT 分配一次。
因此,该静态变量确实是持久的,但被执行该代码的所有 UDT 实例共享(它不是特定于实例的变量)。
参见
返回 目录