![]() |
Klasse inkl. aller Unterklassen als Parameter übergeben
Hallo zusammen,
leider brauche ich etwas Hilfe. Ich habe folgende Klassen (Beispiel):
Delphi-Quellcode:
Optimal wäre es jetzt wenn man es irgendwie schaffen könnte, eine Instanz der THauptklasse zu erzeugen und darüber auf die Unteklassen zugreifen könnte, sodass ich bei einem Aufruf einer Prozedur nur die THaupsklasse als Paramter übergeben muss und gleichzeitig die beiden Unterklassen mitübergeben habe.
THauptklasse = class
... end; TUnterklasseEins = class(THauptklasse) Eigenschaft1: string; Eigenschaft2: string; end; TUnterklasseZwei = class(THauptklasse) Eigenschaft1: string; Eigenschaft2: string; end; Beispiel:
Delphi-Quellcode:
Vielen Dank für die Hilfe und hoffe, dass ich es relativ verständlich erklärt habe, was mein Problem ist.
....
interface ... type TTest = class private procedure eins(Hauptklasse: THauptklasse); procedure zwei(); end; implementation TTest.zwei() var Haupt: THauptklasse; begin Haupt := THauptklasse.Create; //Jetzt wäre es gut wenn man irgendwie wie auf eine Eigenschaft der klasse zugreifen könnte. Beispiel: Haupt.TUnterklasseEins.Eigenschaft1 := ......; eins(Haupt); end; TTest.eins(Hauptklasse: THaupsklasse) var test: string; begin //Hier wäre es gut wenn nicht nur die THauptklasse übergeben werden würde, sondern auch die Untergeordneten Klassen und man so über das o. g. Prinzip auf dessen Eigenschaften zugreifen könnte. Beispiel: test := Hauptklasse.TUnterklasseEins.Eigenschaft1; end; |
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Wie wäre es mit sowas?
Delphi-Quellcode:
type
TElternklasse = class; TKindklasse1 = class(TElternklasse) ... end; TKindklasse2 = class(TElternklasse) ... end; TElternklasse = class private FKind1: TKindklasse1; FKind2: TKindklasse2; public property Kind1: TKindklasse1 read FKind1; property Kind2: TKindklasse2 read FKind2; end; |
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Schau dir mal die Abstrakten Klassen an. Dabei sollte deine Hauptklasse(abstrakte) eine methode (in deinem beispiel "eins") beinhalten. Dann bastelst dir beliebig viele unterklassen.
jetzt übergibst du als parameter die abstrakte Klasse, rufst die abstrakte methode auf und fertisch^^ gruß |
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Wobei die Vererbung der Kindklassen von der Hauptklasse noch etwas fragwürdig ist.
Falls die Kinder Gemeinsamkeiten haben, dann eine eigene Vorfahrklasse für die Kinder. Ansonsten kommt man hier wohl auch ohne Vererbung aus. Falls auch mal mehr Kindklassen möglich sind, dann diese auch verwerben, selbst wenn physisch nichts vererbt wird, außer daß es alle Kinder sind. Und dann die Kinder in eine Liste und nicht unbedingt je in ein eigenes Property. |
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Vielen Danke für die schnelle Hilfe.
Das wars, was ich gesucht habe. |
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Zitat:
|
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Zitat:
|
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Zitat:
|
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Zitat:
|
AW: Klasse inkl. aller Unterklassen als Parameter übergeben
Ich denke hier ist einfach ein Cast angebracht:
Delphi-Quellcode:
Wie schon gesagt, wenn es sich im Prinzip um die selben Eigenschaften handelt, könnte man diese auch abstract in der Basisklasse deklarieren. Eine anderer Weg ist die gleichartigen Eigenschaften und Methoden zu einem Interface zusammen zu fassen und bei Bedarf abzufragen.
TTest.eins(Hauptklasse: THaupsklasse)
var test: string; begin //Hier wäre es gut wenn nicht nur die THauptklasse übergeben werden würde, sondern auch die Untergeordneten Klassen und man so über das o. g. Prinzip auf dessen Eigenschaften zugreifen könnte. Beispiel: if Hauptklasse is TUnterklasseEins then test := TUnterklasseEins(Hauptklasse).Eigenschaft1 else if Hauptklasse is TUnterklasseZwei then test := TUnterklasseZwei(Hauptklasse).Eigenschaft1; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz