AGB  ·  Datenschutz  ·  Impressum  







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

Assign auf Vorfahr-Komponente

Ein Thema von berens · begonnen am 15. Jun 2009 · letzter Beitrag vom 18. Jun 2009
 
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
 


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 16:16 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