1 type Name = {packed} Record
Declarations ...
end;
2 type Name = {packed} record
type Name = {packed} record
Declarations ...
case {Tag :} Ordinal type of
Ordinal value {,Ordinal value...} : (Declarations);
{...}
end;
Ключевое слово Record один из самых полезных, и отличительных особенностей Delphi (и языка Паскаля). Оно обеспечивает средство сбора в одну структуру набора различных типов данных.
На каждое поле в записи ссылаются следующим способом record.field.
Когда объявлено, опция Packed, Delphi минимизирует память, отведенную под запись. Эти сокращения в памяти повлиять на выполнение, где данные не выстроены, соответственно, по 2, 4 или 8 байт. По умолчанию должно выровняться, где необходимо, с заполнителями.
Есть два основных типа полей записи, как показано в двух синтаксических типах:
1. Простое объявление поля
Это стандартные объявления переменных Delphi, типа:
size : Integer;
за исключением того, что их размер должен быть определен. Например:
description : string[20];
потому, что Delphi должен знать точный объём памяти необходимый этому полю в записи.
2. Выбираемые (Различные) разделы поля
Они должны всегда следовать за любыми основными объявлениями полей (ключевое слово Case не имеет закончившего слова End;).
Они позволяют различным, альтернативным типам данных заменять друг друга. Например, запись пациента может иметь различный раздел объявлений для женщин по сравнению с мужчинами. Использование той же самой записи с Variant частью является разумнее.
По умолчанию, поля в записи выравниваются по Byte и Word границам. Для обоих типов записи, опция packed позволяет ей быть изменённой, чтобы уменьшить требуемый объём памяти.
|
type
// Объявление записи клиента
TCustomer = Record
firstName : string[20];
lastName : string[20];
address1 : string[100];
address2 : string[100];
address3 : string[100];
city : string[20];
postCode : string[8];
end;
var
John, Sarah : TCustomer;
begin
// Присвоение подробностей клиенту Джону
with John do
begin
firstName := 'John';
lastName := 'Smith';
address1 := '7 Park Drive';
address2 := 'Branston';
address3 := 'Grimworth';
city := 'Banmore';
postCode := 'BNM 1AB';
end;
// Присвоение подробностей о сестре Джона - просто копирование целой записи
Sarah := John;
// И затем изменение имени
Sarah.firstName := 'Sarah';
// Теперь показ подробностей обоих клиентов
with John do ShowCustomer([firstName, lastName,
address1, address2, address3,city,
postCode]);
ShowMessage('');
with Sarah do ShowCustomer([firstName, lastName,
address1, address2, address3,city,
postCode]);
end;
// Процедура, которая отображает переменное число строк
procedure TForm1.ShowCustomer(const fields: array of string);
var
i : Integer;
begin
// Отображение всех переданных полей - примечание: массивы начинаются с 0
for i := 0 to Length(fields)-1 do
ShowMessage(fields[i]);
end;
|
C использованием ключевого слова With, к полям записи можно обращаться без указания префикса каждый раз с названием поля.
В отличие от Объектно-ориентированных языков подобно Java, Тип Record в Delphi обеспечивает лучший механизм выполнения для передачи подобных групп данных чем классы данных.
|