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 обеспечивает лучший механизм выполнения для передачи подобных групп данных чем классы данных.
|