Thema: Delphi into Record?

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#5

AW: into Record?

  Alt 27. Aug 2022, 19:56
Ja?

Mir fallen hierfür noch ein paar mehr "Sonderfälle" ein und irgendwann wird es dann normal


Rein technisch sollten es im Compiler nicht so große Änderungen sein.
* hier ein +FieldOffset bei den Aufrufen
* und für Pointer und Classen zusätzlich noch eine Referenz auflösen

Und beim Parser/LSP muß nur der eine Punkt beachtet werden, wobei das ja schon gemacht wird, beim Zugriff auf das Feld.



Ich hatte schon mehrmals den Wunsch nach sowas.
Aktuell hätte ich zwei Records, welche nach außen genau gleich aufgebaut sind.
Am Liebsten wäre es mir, es wäre nur ein Record,
aber sie unterscheiden sich im Verhalten, wenn man komplette Records einander zuweist.
* einmal wird nur der Wert übernommen und zurückgeschrieben
* und das andere Mal wird Wert+Name übernommen
jenachdem von wo die Records kommen
* als Result aus einem Getter
* oder es ist eine Variable

Also einmal TResult oder TVariable, die aber von den Schnittstellen her komplett identisch sind.
Aktuell tendiere ich mehr in Richtung Generic, mit zwei Ableitungen, nur um es namentlich zu unterscheiden.
[edit] ohhh, jetzt wo ich nochmal drüber nachdenke ... eventuell geht auch type .
Delphi-Quellcode:
type
  A = record
    procedure Test;
  end;

  B = type A;
Aber ich glaube noch nicht wirklich, dass ich da im Setter etwas vom B mitbekomm.







Eigentlich wäre eine gute Lösung auch, wenn Emba die Getter/Setter reparieren würde.
Denn das ist der Grund, warum ich hier jetzt das "eigentliche" Problem habe.
Delphi-Quellcode:
type
  TFuu = record {or class}
    FBar: TPoint;
    procedure SetBar(Value: TPoint)
    propery Bar: TPoint read FBar write SetBar;
  end;

Fuu.Bar.X := 123;

// wird ja intern als
Temp := Fuu.FBar; // Temp := Fuu.GetBar;
Temp.X := 123;
// dann wird Temp entsorgt und die Zuweisung ist weg

// besser wäre es, würde der Compiler daraus das machen
Temp := Fuu.Bar; // Temp := Fuu.GetBar;
Temp.X := 123;
Fuu.SetBar(Temp);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Aug 2022 um 00:14 Uhr)
  Mit Zitat antworten Zitat