![]() |
Record zu Class umschreiben (Getter/Setter)
Ich habe in meinem Code ein etwas größeres Record. Manche Variablen umrande ich im Code mit einer TMultiReadExclusiveWriteSynchronizer Begin/End Read/Write. Das leider mehrmals.
Ich dachte nun daran das Record in eine Class umzuschreiben mit Gettern und Settern. Bei den Gettern würde ich Begin/EndRead und bei den Settern Begin/EndWrite nutzen. Aber wie schreibe ich ein Record in eine Klasse um, OHNE 1000 Stellen im Code ändern zu müssen? Beispiel:
Delphi-Quellcode:
type
TMyData = record a,b,c,d,e,f: string; aa,bb,c,dd,ee,ff: Integer; end; // global verfügbar var aMyData: TMyData; |
AW: Record zu Class umschreiben
TMyData = class
gruss |
AW: Record zu Class umschreiben
Ich möchte wirklich nicht unfreundlich sein, aber das weiß ich schon und das war nicht die Frage.
|
AW: Record zu Class umschreiben
Zitat:
Da wirst du nicht drum rum kommen. Schöner wäre es auch die Felder in der Klasse in Properies umzuwandeln. Aber das musst du nicht unbedingt tun, wenn du so wenig Arbeit haben möchtest wie nur möglich. |
AW: Record zu Class umschreiben (Getter/Setter)
Zitat:
|
AW: Record zu Class umschreiben (Getter/Setter)
Du kannst auf properties in records verwenden.
Alle Felder nach privat und dann so in etwa (habe jetzt nicht alle setter getter reingenommen....
Delphi-Quellcode:
type
TMyData = record private fa,fb,fc,fd,fe,ff: string; faa,fbb,fcc,fdd,fee,fff: Integer; function geta: string; procedure seta(const Value: string); public property a : string read geta write seta; end; implementation { TMyData } function TMyData.geta: string; begin result := fa; end; procedure TMyData.seta(const Value: string); begin fa := value; end; |
AW: Record zu Class umschreiben
Zitat:
|
AW: Record zu Class umschreiben (Getter/Setter)
Im Endeffekt möchtest du folgendes automatisiert haben:
Von
Delphi-Quellcode:
zu
TMyRecord = record
someField: Integer; end;
Delphi-Quellcode:
Und das für eine beliebige Anzahl an Feldern im Record. Ich kenne keinen in der IDE eingebauten Automatismus dafür, der
TMyObject = class
private var FSomeField: Integer; public function getSomeField(): Integer; procedure setSomeField(const value: Integer); end; ![]() Ich würde es an deiner Stelle aber trotzdem nicht tun. Erstens versteckst du das ganze Gelocke und Entsperren nur vor dem Aufrufer und zweitens fällt der Code auf die Nase falls du die Felder irgendwo z.B. in eine Methode mit var/out-Parameter gesteckt hast, das geht mit Properties in Delphi ja auch nicht. PS: Ich möchte auch nicht unfreundlich sein, aber wenn du irgendein globales Gott-Objekt mit "tausend" Variablen hast und jetzt auch noch aus mehreren Threads anfängst die Werte zu manipulieren hast du im Kern wahrscheinlich ganz andere Probleme... |
AW: Record zu Class umschreiben (Getter/Setter)
Delphi-Quellcode:
Um die Erzeugung der Instanzen an den betreffenden Stellen wirst du aber nicht drum rum kommen. Wenn du mit globalen Variablen deines Records arbeitest, reichts aber auch, wenn du dir entsprechend globalen Instanzen erzeugst (z.B. im Initialization-Teil einer Unit). Nicht vergessen die Instanzen auch wieder freigeben !.
type
TMyData = record a,b,c,d,e,f: string; aa,bb,c,dd,ee,ff: Integer; end; TMyDataClass = Class private fdata : TMyData; protected function GetA:String; procedure SetA(value:string); : function GetAA:Integer; procedure SetAA(Value:integer); : published property a : string read GetA write SetA; : property aa: integer read GetAA write SetAA; end; |
AW: Record zu Class umschreiben (Getter/Setter)
Zitat:
Ich möchte solche Stellen, die ich mehrfach habe, durch einen Setter einmalig erledigt haben
Delphi-Quellcode:
=> TMultiReadExclusiveWriteSynchronizer.BeginWrite;
aMyRec.a := '123'; => TMultiReadExclusiveWriteSynchronizer.EndWrite; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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