AGB  ·  Datenschutz  ·  Impressum  







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

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 4  1 23     Letzte » 
Glados
(Gast)

n/a Beiträge
 
#1

Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 17: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 17:20 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Record zu Class umschreiben

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

gruss
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

AW: Record zu Class umschreiben

  Alt 12. Jul 2017, 17:20
Ich möchte wirklich nicht unfreundlich sein, aber das weiß ich schon und das war nicht die Frage.
  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
 
#4

AW: Record zu Class umschreiben

  Alt 12. Jul 2017, 17: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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#5

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 17:28
Aber wie schreibe ich ein Record in eine Klasse um, OHNE 1000 Stellen im Code ändern zu müssen?
Das kommt darauf an, wie du die einzelnen Record-Felder in deinem Code verwendest. Solange du schreibend nur per Zuweisung darauf zugreifst, sollten gleichnamige Properties einer Klasse weiterhin funktionieren. Wenn du die Felder aber als Variablen verwendest, wird das mit Properties nicht funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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, 17:29
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;
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#7

AW: Record zu Class umschreiben

  Alt 12. Jul 2017, 17:30
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.
Laut Eingangspost ist aber genau das der Zweck.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 17: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
Ghostwalker

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

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 17: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
 
#10

AW: Record zu Class umschreiben (Getter/Setter)

  Alt 12. Jul 2017, 17: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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz