Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Vererbung - Designfrage (https://www.delphipraxis.net/149912-vererbung-designfrage.html)

semo 2. Apr 2010 09:20


Vererbung - Designfrage
 
Delphi-Quellcode:
type
  TGeneral = class...

  TSpecified1 = class(TGeneral)...
  TSpecified2 = class(TGeneral)...
  TSpecified3 = class(TGeneral)...

  TList of TGeneral...
Zu Beginn fülle ich meine TList mit TGeneral-Objekten.
Irgendwann zur Laufzeit ermittle ich dann die Typen der Objekte und möchte dann auch entsprechend die TGeneral Objekte in TSpecified1, TSpecified2 und TSpecified3 "einsortieren".

Wie macht man dies am besten?

Meine Idee wäre es, ein neues TSpecified1, TSpecified2 und TSpecified3 zu erzeugen, die properties des alten TGeneral zu übernehmen, dann das alte TGeneral freigeben und das neue TSpecifiedX an den entsprechenden Index in der Liste einzufügen.

Oder gibt es dafür eine schönere Vorgehensweise?

mkinzler 2. Apr 2010 09:23

Re: Vererbung - Designfrage
 
Befinden sich gemischte Typen in der Liste? Wenn nicht, dann gleich den passenden Typ, sonst den Typ beim Zugriff Casten.

semo 2. Apr 2010 09:44

Re: Vererbung - Designfrage
 
Zu Beginn sind alle Objekte in der Liste vom Typ TGeneral,
erst nach einer Analyse werden die Typen der TGeneral Objekte bestimmt.

himitsu 2. Apr 2010 10:05

Re: Vererbung - Designfrage
 
Wenn z.B. in den abgeleiteten TSpecified1 und Co. keine neuen Variablen oder virtuelle Methoden eingeführt wurden, also wenn die "Verwaltung" und der Speichervrebrauch gleich sind, dann könnte man zwar den "internen" Typenzeiger ändern, aber ich würde davon abraten und den "empfohlenen" Weg empfehlen ... also neues Objekt erzeugen und die Eigenschaften kopieren.

Delphi-Quellcode:
Specified := TSpecified1.Create;
Specified.Assign(General);
General.Free;

semo 2. Apr 2010 15:27

Re: Vererbung - Designfrage
 
Zitat:

also neues Objekt erzeugen und die Eigenschaften kopieren
Führt also kein Weg daran vorbei. Ok.

Khabarakh 2. Apr 2010 15:42

Re: Vererbung - Designfrage
 
Zitat:

Zitat von semo
Irgendwann zur Laufzeit ermittle ich dann die Typen der Objekte und möchte dann auch entsprechend die TGeneral Objekte in TSpecified1, TSpecified2 und TSpecified3 "einsortieren".

Klingt für mich nach einem merkwürdigen Design, das Decorator Pattern o.Ä. sollte da eher passen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz