AGB  ·  Datenschutz  ·  Impressum  







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

Vererbung - Designfrage

Ein Thema von semo · begonnen am 2. Apr 2010 · letzter Beitrag vom 2. Apr 2010
Antwort Antwort
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#1

Vererbung - Designfrage

  Alt 2. Apr 2010, 09:20
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Vererbung - Designfrage

  Alt 2. Apr 2010, 09:23
Befinden sich gemischte Typen in der Liste? Wenn nicht, dann gleich den passenden Typ, sonst den Typ beim Zugriff Casten.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Vererbung - Designfrage

  Alt 2. Apr 2010, 09:44
Zu Beginn sind alle Objekte in der Liste vom Typ TGeneral,
erst nach einer Analyse werden die Typen der TGeneral Objekte bestimmt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#4

Re: Vererbung - Designfrage

  Alt 2. Apr 2010, 10:05
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Vererbung - Designfrage

  Alt 2. Apr 2010, 15:27
Zitat:
also neues Objekt erzeugen und die Eigenschaften kopieren
Führt also kein Weg daran vorbei. Ok.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Vererbung - Designfrage

  Alt 2. Apr 2010, 15:42
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:30 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