AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Record zu Class umschreiben (Getter/Setter)
Thema durchsuchen
Ansicht
Themen-Optionen

Record zu Class umschreiben (Getter/Setter)

Ein Thema von Glados · begonnen am 12. Jul 2017 · letzter Beitrag vom 12. Jul 2017
Antwort Antwort
Seite 1 von 2  1 2      
Glados
(Gast)

n/a Beiträge
 
#1

Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 16:14
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;

Geändert von Glados (12. Jul 2017 um 16:20 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Record zu Class umschreiben

  Alt 12. Jul 2017, 16:16
TMyData = class

gruss
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

AW: Record zu Class umschreiben

  Alt 12. Jul 2017, 16:20
Ich möchte wirklich nicht unfreundlich sein, aber das weiß ich schon und das war nicht die Frage.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 16:30
Im Endeffekt möchtest du folgendes automatisiert haben:

Von
Delphi-Quellcode:
   TMyRecord = record
      someField: Integer;
   end;
zu
Delphi-Quellcode:
   TMyObject = class
      private var
         FSomeField: Integer;
      public
         function getSomeField(): Integer;
         procedure setSomeField(const value: Integer);
   end;
Und das für eine beliebige Anzahl an Feldern im Record. Ich kenne keinen in der IDE eingebauten Automatismus dafür, der Model Maker Code Explorer ist aber EXTREM EMPFEHLENSWERT und scheint das zu können.

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...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 16:35
Zitat:
Du kannst auf properties in records verwenden.
Ich denke so wie herausgelesen weis er das alles..
Er möchte so wenig ändern wie möglich, darum geht es ihm.
Zitat:
OHNE 1000 Stellen im Code ändern zu müssen
Nur wie soll das gehen

gruss
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 16:38
Zitat:
Nur wie soll das gehen
genau deshalb..... Properties in den Record, dann muss er nur die Record Definition anpassen.....
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 18:18
Zitat:
Du kannst auf properties in records verwenden.
Ich denke so wie herausgelesen weis er das alles..
Er möchte so wenig ändern wie möglich, darum geht es ihm.
Zitat:
OHNE 1000 Stellen im Code ändern zu müssen
Nur wie soll das gehen

gruss
Bei Record belassen, die Felder umbenennen und die Property so wie das Feld nennen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 16:31
Delphi-Quellcode:
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;
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 !.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#9

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 16:34
Zitat:
Im Endeffekt möchtest du folgendes automatisiert haben:
Nein.

Ich möchte solche Stellen, die ich mehrfach habe, durch einen Setter einmalig erledigt haben
Delphi-Quellcode:
=> TMultiReadExclusiveWriteSynchronizer.BeginWrite;
aMyRec.a := '123';
=> TMultiReadExclusiveWriteSynchronizer.EndWrite;
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Record zu Class umschreiben

  Alt 12. Jul 2017, 16:25
TMyData = class
Und du musst überall wo du die Klasse benutzt die Objekte erstellen und freigeben.
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:29 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