Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size

Record

Печать
Рейтинг пользователей: / 0
ХудшийЛучший 

Record

Описание

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;

John
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB

Sarah
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB

Примечание

C использованием ключевого слова With, к полям записи можно обращаться без указания префикса каждый раз с названием поля.

В отличие от Объектно-ориентированных языков подобно Java, Тип Record в Delphi обеспечивает лучший механизм выполнения для передачи подобных групп данных чем классы данных.

 

Авторизация



Счетчики