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...