Record Data als Property in class

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Acia6850
Beiträge: 40
Registriert: Mo 9. Okt 2023, 18:45
OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
CPU-Target: 64Bit
Wohnort: LK Ludwigsburg

Record Data als Property in class

Beitrag von Acia6850 »

Hallo eine kleine Frage,
ist es möglich in einer Klasse ein Property mit einem Recod Typ als read zu implementieren.

Bsp A oder geht nur Bsp B

Bsp A

Code: Alles auswählen

Type
  TData = record
    sStr : AnsiString;
    nNum : Longint;
  end;

  { TCalSeasonDateTime }

  TDummy = class
    private

     function xGetRecData : TData;
     
    public
      Constructor create(nCityNo : NativeInt);
      Destructor  destroy; override;

    published 
      property RecData : TData read xGetRecData;

  end;
Bsp B

Code: Alles auswählen

Type
  TData = record
    sStr : AnsiString;
    nNum : Longint;
  end;

  { TCalSeasonDateTime }

  TDummy = class
    private

    public
      Constructor create(nCityNo : NativeInt);
      Destructor  destroy; override;

     function xGetRecData : TData;

    published
     
  end;       
  
  


Grüsse

Acia6850

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Record Data als Property in class

Beitrag von theo »

Kommt drauf an, was dein Ziel ist.
Wenn du "property RecData : TData read xGetRecData;" vom "published" in den "public" Abschnitt verschiebst, geht es schon.

Soner
Beiträge: 742
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Record Data als Property in class

Beitrag von Soner »

A geht nicht, bei published property muss eine die Klasse streaming unterstützten, wenn du published mit public/private/protected tauscht, dann geht a auch.
b geht auf jeden Fall.

Falls du unbedingt published brauchst, dann kannst du statt Record TCollection nehmen.

Warf
Beiträge: 2148
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Record Data als Property in class

Beitrag von Warf »

Wie bereits schon gesagt ist der Unterschied hier nicht property vs Function sondern public vs published. Letzteres brauchst du eigentlich nur für Komponenten.

Dazu sei noch gesagt, readonly properties sind nur dann readonly wenn sie intern eine Funktion benutzen:

Code: Alles auswählen

type
  TMyClass = class
  private
    FData: Integer;
  public
    property Data: Integer read FData;
  end;

var
  MyInstance: TMyClass;
begin
  // Schreiben einer "readonly" property:
  MyInstance := TMyClass.Create;
  PInteger(@MyInstance.Data)^:=42;
  WriteLn(MyInstance.Data);
end.

Acia6850
Beiträge: 40
Registriert: Mo 9. Okt 2023, 18:45
OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
CPU-Target: 64Bit
Wohnort: LK Ludwigsburg

Record Data als Property in class (gelöst)

Beitrag von Acia6850 »

Hallo,

vielen Dank für die Information und Lösungen.

Ich habe mich entschlossen mit Bsp B zu arbeiten.

Grüße

Acia6850

Antworten