AGB  ·  Datenschutz  ·  Impressum  







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

Daten zwischen Klassen übertragen (mit RTTI?)

Ein Thema von lowmax_5 · begonnen am 12. Okt 2016 · letzter Beitrag vom 13. Okt 2016
 
Benutzerbild von himitsu
himitsu

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

AW: Daten zwischen Klassen übertragen (mit RTTI?)

  Alt 12. Okt 2016, 12:44
Etweder man schreibt 'ne Eigene Methode, die sich "Assign" nennt,
oder die Klassen müssen Nachfahren von TPersistent oder TComponent sein, wo man deren Assign überschreibt und die Zuweisungen seiner Property da rein baut.

Delphi-Quellcode:
type
  TMyClass1 = class(TPersistent)
    ...
    procedure Assign(Source: TPersistent); override;
  end;
  TMyClass2 = class(TMyClass1) // oder class(TPersistent) wenn nicht voneinander abgeleitet
    ...
    procedure Assign(Source: TPersistent); override;
  end;

procedure TMyClass1.Assign(Source: TPersistent);
begin
  inherhited;
  if Source is TMyClass1 then begin
    PropA := TMyClass1(Source).PropA;
    PropB := TMyClass1(Source).PropB;
    ...
  end;
// if Source is TMyClass2 then begin // dass auch noch, wenn nicht voneinander abgeleitet
// PropA := TMyClass2(Source).PropA; // wobei es dann doch besser in TMyClass2.AssignTo rein gehören würde
// PropB := TMyClass2(Source).PropB;
// end;
end;

procedure TMyClass2.Assign(Source: TPersistent);
begin
  inherhited;
  if Source is TMyClass1 then begin
    PropA := TMyClass1(Source).PropA;
    PropB := TMyClass1(Source).PropB;
    ...
  end;
  if Source is TMyClass2 then begin
    //PropA := TMyClass2(Source).PropA; // dass auch noch, wenn nicht voneinander abgeleitet
    //PropB := TMyClass2(Source).PropB;
    PropC := TMyClass2(Source).PropC;
    ...
  end;
end;


Wenn man Published-Property kopieren will, kann man auch die Serialisierungsfunktionen von TPersistent verwenden, also die MyClass1 in 'nen Stream speichern und MyClass2 aus dem TSream laden, aber zum "Kopieren" wäre es wie mit Kanonen auf Spatzen...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Okt 2016 um 12:46 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 20:39 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