Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Assign auf Vorfahr-Komponente

  Alt 16. Jun 2009, 06:28
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.
fork me on Github
  Mit Zitat antworten Zitat