Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 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...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Okt 2016 um 12:46 Uhr)
  Mit Zitat antworten Zitat