![]() |
Delphi-Version: XE2
Getter und Setter eines Records inlinen?
Hallo zusammen,
ich habe einen kleinen Record, welcher in sehr kompakter Form Daten speichert. Diese Daten werden mit simplen Bit Operationen aus verschiedenen Feldern gelesen und geschrieben. Für den simplen Zugriff habe ich jeweils Properties und entsprechende Getter / Setter erstellt. Jetzt habe ich mich gefragt, ob es sinnvoll ist diese Methoden mit der inline Direktive zu versehen? Weiß jemand, wie das Standardverhalten von Delphi in Bezug auf Inlining von Gettern und Settern ist? Viele Grüße Zacherl |
AW: Getter und Setter eines Records inlinen?
Das ist auf jeden Fall sinnvoll, insbesondere wenn diese Properties häufig angesprochen werden.
Standardmäßig wird nichts inlined wo das nicht dransteht. |
AW: Getter und Setter eines Records inlinen?
Ich habe das auch so gemacht, als ich vor ein paar Tagen (in Freepascal) balancierte Bäume implementiert habe. Ist denke ich definitiv sinnvoll. Interessant wäre nur, ob der Compiler auch die automatisch aufgerufenen Getter und Setter bei Properties inlinen kann, denn schließlich müssen die ja auch für die RTTI zugänglich sein. Das müsste man mal ausprobieren... In meinem Fall gab es aber praktisch eh nur lesende Zugriffe, deshalb habe ich mir die Mühe nicht gemacht, das zu prüfen, sondern mir die Properties gespart und einfach das „Get“ im Funktionsnamen weggelassen und dann die Funktion so benutzt wie eine Property.
|
AW: Getter und Setter eines Records inlinen?
Zitat:
|
AW: Getter und Setter eines Records inlinen?
Zitat:
Allerdings gibt es ja unter neueren Delphis (die ich nicht habe) auch noch diese erweiterte RTTI, ich weiß nicht ob die Regel mit published dort noch gilt. |
AW: Getter und Setter eines Records inlinen?
Zitat:
Zitat:
|
AW: Getter und Setter eines Records inlinen?
Published ist der Extended RTTI ziemlich egal. Die kommt sogar an private Felder und Properties dran :-D
Vor ein paar Monaten habe ich mich das auch laut gefragt (siehe: ![]() |
AW: Getter und Setter eines Records inlinen?
Records unterstützen eh nur die Sichtbarkeiten private und public.
Und die Enhanced RTTI ist auch in XE4 bisher unfähig Properties von Record types auszulesen (bzw die RTTI wird vermutlich gar nicht generiert - siehe ![]() |
AW: Getter und Setter eines Records inlinen?
Sie wird für Felder, Attribute und Methoden von Records ausgelesen, aber nicht für Properties. Das sieht man auch sofort im Quelltext des Typs TRttiRecordType:
Delphi-Quellcode:
Nicht überschrieben ist hingegen:
function GetDeclaredFields: TArray<TRttiField>; override;
function GetDeclaredMethods: TArray<TRttiMethod>; override; function GetAttributes: TArray<TCustomAttribute>; override;
Delphi-Quellcode:
Genauso wenig GetProperties.
function TRttiType.GetDeclaredProperties: TArray<TRttiProperty>;
begin Exit(nil); end; Wenn ich das aber in der generierten .exe richtig lese, sind die Informationen dort durchaus vorhanden... es gibt nur offenbar in der RTTI keine Möglichkeit sie auszulesen. |
AW: Getter und Setter eines Records inlinen?
Zitat:
VMT Hack für TRttiRecord Type um die GetDeclaredProperties Methode zu überschreiben ist ja kein Problem :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 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 by Thomas Breitkreuz