Das Problem ist, dass du noch nicht verstanden hast, wie Assign funktioniert.
Wenn man TPersistent zu einem TPersistent zuweisen möchte, dann wird direkt eine
Exception geworfen.
(es wird in Wirklichkeit noch der Weg über AssignTo() probiert, aber das braucht hier mal nicht zu stören)
Das Gleiche gilt für TComponent: TComponent.Assign() ist nicht implementiert; also
Exception.
Die Klassenhierachie sieht so aus:
Code:
TObject->TPersistent->TComponent->TMeineKlasse1->TMeineKlasse2->TMeineKlasse3
TMeinKlasse1 darf also nur dann inherited aufrufen, wenn es mit der Klasse von Source nichts anfangen kann.
Delphi-Quellcode:
procedure TMeineKlasse1.Assign(Source: TPersistent);
var
begin
if Source
is TMeineKlasse1
then
begin
Self.X := TMeineKlasse1(Source).X;
Self.Y := TMeineKlasse1(Source).Y;
end
else if Source
is TControl
then // nur ein Beispiel
begin
Self.X := TControl(Source).Left;
Self.Y := TControl(Source).Top;
end
else
// "ich kenne deine Klasse nicht" - also inherited aufrufen
// das führt zur Exception
inherited;
end;
Für die Klassen TMeineKlasse2 und TMeineKlasse3 gilt folgende Strategie:
Alle eigenen Properties kopieren und dann
immer inherited aufrufen, denn man weiss ja
dass drüber die Klasse TMeineKlasse1 sitzt und den Rest erledigt.