![]() |
Klasse in Klasse
hi
Ich habe eine Klasse die ich von TLineSeries abgeleitet habe. Als eigenschaft habe ich eine andere Klasse asl Eigenschafts-kontainer von TPersistent abgeleitet. Wie kann ich nun in einer Funktion der Klasse von TPersistent auf die Funktionen der Übergeorneten Klasse zugreifen?
Delphi-Quellcode:
type
TProcessDescription = class(TPersistent) private {eigenschaften} public procedure machwas; end; TdddLineSeries = class(TLineSeries) private { Private declarations } FProzDesc : TProcessDescription; procedure SetProzDesc(Value : TProcessDescription); protected { Protected declarations } public { Public declarations } property ProzDesc : TProcessDescription read FProzDesc write SetProzDesc; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } end; procedure TProcessDescription.machwas; begin //auf TdddLineSeries zugreifen? end; ////////////////////////////////////////////////////////////////////////////// procedure TdddLineSeries.SetProzDesc(Value : TProcessDescription); begin if not(CompareMem(@Value, @FProzDesc, sizeof(Value))) then FProzDesc := Value; end; |
Re: Klasse in Klasse
Hi,
Dir fehlen irgendwie die Grundlagen zur objekt-orientierten Programmierung. Lies mal: ![]() Thema Vererbung, weiterlesen bis virtuelle Methoden. Der Konstruktor von TdddLineSeries ist übrigens nicht richtig; nur Klassen, die von TComponent abgeleitet wurden haben den Übergabeparameter AOwner. |
Re: Klasse in Klasse
TdddLineSeries kennt TProcessDescription, weil das da deklariert wird.
TProcessDescription kennt TdddLineSeries allerdings nicht, da TdddLineSeries eine erbende Klasse von TProcessDescription ist. Eine Klasse kennt immer nur die Methoden/Variablen/etc. der übergeordneten Klasse. |
Re: Klasse in Klasse
Du könntest beim Erstellen von FProzDesc eine Referenz auf das TdddLineSeries-Objekts mitgeben und im FProzDesc speichern. Dann kannst du auf die öffentlichen Methoden des TdddLineSeries-Objekts zugreifen.
Ob das aber so besonders sinnvoll ist wage ich zu bezweifeln. Das Ganze führt auf Dauer doch nur zu Chaos und hebelt irgendwie die OOP aus. |
Re: Klasse in Klasse
Hmm nun wie macht man das denn dann eigentlich grunsätzlich wenn man in ne Komponente eine Property unterbringen will die wiederrum untereigenschaften enthält die ovn unterschiedlichen typen sind? Das dient ja im Prinzip nur zur übersihtlichkeit da man die eigenschaften die zusammengehören gruppiert. Das sind doch dann auch Klassen oeder wie wird das gemacht?
|
Re: Klasse in Klasse
Ich bin nicht sicher ob ich dich hier richtig verstehe, aber wenn du nur Eigenschaften gruppieren willst, würde sich doch auch ein Record anbieten
|
Re: Klasse in Klasse
Hallo
flogo hat den richtigen Ansatz geliefert. So wird der Ansatz umgesetzt:
Delphi-Quellcode:
type
TdddLineSeries = class; // forward Deklaration von TdddLineSeries TProcessDescription = class(TPersistent) private {eigenschaften} FParent : TdddLineSeries; public constructor Create(aParent : TdddLineSeries); procedure machwas; end; ... TdddLineSeries = class(TLineSeries) constructor TProcessDescription .Create(aParent : TdddLineSeries); begin ... FParent:=aParent; ... end; ... constructor TdddLineSeries.Create(...); begin ... FProcessDescription:=TProcessDescription.Create(Self); ... end; |
Re: Klasse in Klasse
Danke sehr! :thumb:
funktioniert wunderbar |
Re: Klasse in Klasse
Zitat:
Delphi-Quellcode:
tuts auch.
if FProzDesc <> Value then
FProzDesc := Value; achja und "sizeof(value)" wäre ja "sizeof(classinstance)" klassen sind pointer und die größe von pointern wäre 4 - also würdest du WENN du das schon mit dem comperemem so machst nur die ersten 4 bytes vergleichen |
Re: Klasse in Klasse
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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