AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

into Record?

Ein Thema von himitsu · begonnen am 27. Aug 2022 · letzter Beitrag vom 5. Sep 2022
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 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);
Ein Therapeut entspricht 1024 Gigapeut.

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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