Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   EMB DCE 12 - class und record zusammen, um Operatoren gemeinsam zu nutzen ? (https://www.delphipraxis.net/215972-emb-dce-12-class-und-record-zusammen-um-operatoren-gemeinsam-zu-nutzen.html)

paule32.jk 4. Okt 2024 16:18

EMB DCE 12 - class und record zusammen, um Operatoren gemeinsam zu nutzen ?
 
Hallo,
ich habe das ja schonmal angesprochen, konnte aber noch keine richtige Lösung finden.
Ich hatte auf das Problem mit den "record" und "class" operatoren geschrieben.
Leider kam zu diesen Beitrag nur ein kleiner Tipp, das ich "class" und "record" gemeinsam nutzen kann, aber mir fehlt da jetzt der Einstieg.
Wenn mir jemand ein sehr kleines Beispiel zeigen könnte, bin ich schonmal zufrieden.

Also: Ich würde gerne die Operatoren auch in Klassen verwenden wollen.
Danke für Eure Hilfen.

himitsu 4. Okt 2024 17:48

AW: EMB DCE 12 - class und record zusammen, um Operatoren gemeinsam zu nutzen ?
 
Operatoren gibt es (aktuell) nur bei Records. (da für Objekte eine automatische Speicherverwaltung nötig wäre)

Record-Opertatoren werden syntaktisch als Class-Functions umgesetzt.




Ja, Objekte in Records kann man inzwischen nutzen,
da sich hier via Custom-Managed-Records eine Speicherverwaltung selbst umsetzen lässt.

https://docwiki.embarcadero.com/RADS...toren_(Delphi)
https://docwiki.embarcadero.com/RADS...altete_Records (die deutsche Hilfe ist leider kein Hilfe und strotzt nur so vor Fehlern)
https://docwiki.embarcadero.com/RADS...anaged_Records
https://www.delphipraxis.net/202477-...peratoren.html
https://www.delphipraxis.net/203202-...t-records.html

himitsu 4. Okt 2024 17:59

AW: EMB DCE 12 - class und record zusammen, um Operatoren gemeinsam zu nutzen ?
 
Delphi-Quellcode:
type
  TMyClass = class
  private
    FRefCount: Integer;
  public
    ...
    procedure Test;
  end;

  TRecordForMyClass = record
  private
    FClass: TMyClass;
  public
    // Speicherverwaltung des Records
    class operator Initialize(out Dest: TRecordForMyClass);
    class operator Finalize(var Dest: TRecordForMyClass);
    class operator Assign(var Dest: TRecordForMyClass; const [ref] Src: TRecordForMyClass);
    // Zuweisungen und Casts (implizit oder explizit) zwischen Record und Klasse oder andersrum
    class operator Implicit(a: TMyClass): TRecordForMyClass;
    class operator Implicit(a: TRecordForMyClass): TMyClass;
    ...
    // Property&Methoden hier nochmal deklarieren und durchreichen, damit zum Aufruf die Klasse nicht erst rausgeholt werden muß.
    procedure Test;
  end;
In diesen Record lässt sich die Klasse reingeben und dort Operatoren nutzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz