Delphi Record,两种声明方式
记录是Delphi(Pascal)的独特功能之一,在对我们的应用程序进行编码时非常有用。
在Delphi中,record以程序员给定的名称收集结构中不同类型的一组数据。
引用记录结构的方法是:
type Name = {packed} Record
Fields Declarations ...
end;
...
record.field
...
record关键字具有可选的压缩声明,该声明告诉Delphi最小化分配给该记录的内存存储。
当数据未与适当的2、4或8字节边界对齐时,内存存储空间的减少会影响性能。
记录类型,语句
此结构有两种类型的字段或字段:
带有Case的变量字段声明
变调夹或田野的宣言
这些是标准的Delphi声明,例如:
type
TPersonas = packed record
nombre: string[20];
apellido: string[20];
edad: integer;
domicilio: string[100];
ciudad: string[20];
codigopostal: integer;
end;
...
with TPersonas do
begin
nombre := 'Carlos';
apellido := Perez;
edad := 44;
domicilio := 'Av. Colón 8945';
ciudad := 'Bogotá';
codigopostal := 956545;
end;
...
Showmessage(TPersonas.nombre + ' ' + TPersonas.apellido);
带有Case的变量字段声明
该声明允许基于case声明而彼此重叠的不同替代数据类型。
例如,如果我们有一个测量记录,则它可以是正方形或圆形的不同字段,例如:
type
TObjeto = record
nombreobj: string;
Case esCirculo : Boolean of
True :
(diametro: extended);
False :
(ancho: extended;
alto: extended);
end;
...
TObjeto.nombreobj := 'Circulo Rojo';
TObjeto.esCirculo := True;
TObjeto.diametro := 52.29;
TObjeto.nombreobj := 'Cuadrado Negro';
TObjeto.esCirculo := False;
TObjeto.ancho:= 19;
TObjeto.alto:= 49;
// Esto provocará una exception
TObjeto.nombreobj := 'Circulo Rojo';
TObjeto.esCirculo := False;
TObjeto.diametro := 52.29; // Este Field no está permitido si esCirculo := False
请记住,使用关键字With可以使我们无需在每行中为记录名称加上前缀就可以对字段进行寻址。例如:
with TObjeto do
begin
nombreobj := 'Circulo Rojo';
esCirculo := True;
diametro := 52.29;
end;
with TObjeto do
begin
nombreobj := 'Cuadrado Negro';
esCirculo := False;
ancho:= 19;
alto:= 49;
begin
与Java等其他面向对象的语言不同,与其他语言的类相比,传递数据集时,Delphi注册提供了更好的性能。