Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использовать Запись для сохранения информации из свойств различных классов

Delphi , Синтаксис , Записи и Множества

Использовать Запись для сохранения информации из свойств различных классов

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
    Es ist manchmal interessant, Informationen die zusammen gehoren in Records 
    abzuspeichern. In einer Klassendeklaration kann der Record dann als 
    Sammelstelle benutzt werden, was zum einen die Ubersichtlichkeit des 
    Programmes erhoht, zum anderen eine gewisse Logik widderspiegelt. 
    Der Zugriff auf die einzelnen Felder des Records kann von au?erhalb 
    der Klasse mittels Eigenschaften (Properties) erfolgen, was zu besseren 
    Code fuhrt... 
    Letzlich konnen Records z.B. sehr einfach dann in Dateien abgespeichert 
    bzw. von dort aus wieder geladen werden. This wird dann in einem einzigen 
    Vorgang erledigt: das Speichern des Records. 
}

 { 
   You sometimes wish to store multiple information in a given class like 
   in the example: alltogether when it belongs together. 
   Thus accessing this information from out of the class can be achieved 
   using property declaration. Its a good way to "clean your code" and 
   make it as "logic" as possible. 
   You also may have to store or load information from your class using 
   file or stream technology. This can be done at once for the recorded 
   information from within the given class. 
}

 type
   TPersonRecord = Record
      FirstName: String;
      LastName: String;
      BirthDate: TDate;
      End;

   TForm4 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject);
   private
     fActualUser: TPersonRecord;
     ...
     procedure SaveActualUser(S: TFileStream); // it's an example 
    procedure LoadActualUser(S: TFileStream);
     ...
   public
     property FirstName: string read  fActualUser.FirstName
                                write fActualUser.FirstName;
     property LastName : string read  fActualUser.LastName
                                write fActualUser.LastName;
     property BirthDate: TDate  read  fActualUser.BirthDate
                                write fActualUser.BirthDate;
   end;

 procedure TForm4.SaveActualUser(S: TFileStream);
 begin
   // All that stuff at once in your Stream 
  S.Write(fActualUser, SizeOf(fActualUser))
 end;

 procedure TForm4.LoadActualUser(S: TFileStream);
 begin
   // All that stuff at once back in your class 
  S.Read(fActualUser, SizeOf(fActualUser));
 end;

Этот код демонстрирует использование рекорда для хранения информации о человеке и сохранения/загрузки этой информации из потока файла.

Тип TPersonRecord определен как рекорд с тремя полями: FirstName, LastName и BirthDate. Этот рекорд может быть использован для представления основной информации о человеке.

Класс TForm4 имеет приватное поле fActualUser типа TPersonRecord, которое представляет текущего пользователя. Класс также имеет публичные свойства для каждого поля в TPersonRecord: FirstName, LastName и BirthDate. Эти свойства позволяют доступ к полям извне класса.

Процедура SaveActualUser сохраняет рекорд fActualUser в потоке файла S. Это делается путем записи всего рекорда одним вызовом метода Write потока. Размер рекорда передается в виде аргумента для определения количества байт, которые нужно записать.

Процедура LoadActualUser загружает рекорд fActualUser из потока файла S. Это делается путем чтения всего рекорда одним вызовом метода Read потока. Размер рекорда передается в виде аргумента для определения количества байт, которые нужно прочитать.

Использование рекордов в этом смысле может упростить код и сделать его более эффективным при работе с большими объемами данных. Это также позволяет легко сериализовать и десериализовать объекты, что полезно для хранения и загрузки данных из файлов или баз данных.

Рекомендуется улучшение: Вместо использования функции SizeOf для определения размера рекорда можно определить константу для размера рекорда и использовать ее в процедурах SaveActualUser и LoadActualUser. Это делает код более читаемым и поддерживаемым.

Например:

const
  RECORD_SIZE = SizeOf(TPersonRecord);

procedure TForm4.SaveActualUser(S: TFileStream);
begin
  S.Write(fActualUser, RECORD_SIZE);
end;

procedure TForm4.LoadActualUser(S: TFileStream);
begin
  S.Read(fActualUser, RECORD_SIZE);
end;

Таким образом, если размер рекорда изменится в будущем, вам нужно только обновить значение константы и не все случаи использования SizeOf(TPersonRecord) в коде.

Статья описывает использование записи (Record) для сохранения информации из свойств различных классов в Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Записи и Множества ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-02 10:43:30/0.0084249973297119/1