![]() |
Klassenvariable an übergeordnete Klasse übergeben
Hallo,
ich habe 2 Klassen, wobei vom Mainform die Oberklasse aufgerufen wird, welche wiederum die Unterklasse aufruft. Dabei soll eine Byte-Variable durch die einzelnen Klassen "geschliffen" werden, und ich brauche da wohl einen Denkansatz:
Delphi-Quellcode:
Ich hatte versucht, das über ein Property zu regeln, allerdings habe ich dann das Problem, dass ich dieses ja erst zuweisen kann, sobald die Klasse mit Create erstellt wurde. Ich will aber direkt in der Create-Funktion die Variable weiterverarbeiten.
TYPE TOberklasse = CLASS( TObject )
PRIVATE LocalNr : Byte; Unterklasse : TUnterklasse; PROTECTED PUBLIC PROPERTY Nr : Byte READ LocalNr WRITE LocalNr; CONSTRUCTOR Create; OVERLOAD; END; TUnterklasse = CLASS( TOberklasse ) PRIVATE LocalNr : Byte; PROTECTED PUBLIC PROPERTY Nr : Byte READ LocalNr WRITE LocalNr; CONSTRUCTOR Create; OVERLOAD; END; IMPLEMENTATION FUNCTION TOberklasse.Create; BEGIN INHERITED; ShowMessage(IntToStr(LocalNr)+' wurde übergeben.'); END; FUNCTION TUnterklasse.Create; BEGIN INHERITED; ShowMessage(IntToStr(LocalNr)+' wurde übergeben.'); END; PROCEDURE TMainForm.StartKlasse; VAR Oberklasse : TOberklasse; BEGIN Oberklasse:=TOberklasse.Create; Oberklasse.Nr:=Random(256); {hier muss ich irgendwie die lokale Byte-Variable Nr an die Oberklasse übergeben} END; Wenn ich das Property nach der Create-Funktion zuweise, kann ich es in Create ja nicht weiterverarbeiten... |
Re: Klassenvariable an übergeordnete Klasse übergeben
Delphi-Quellcode:
FUNCTION TOberklasse.Create;
BEGIN INHERITED; Unterklasse := TUnterklasse.Create; ShowMessage(IntToStr(LocalNr)+' wurde übergeben.'); END; FUNCTION TUnterklasse.Create; BEGIN INHERITED; ShowMessage(IntToStr(LocalNr)+' wurde übergeben.'); END; PROCEDURE TMainForm.StartKlasse; VAR Oberklasse : TOberklasse; BEGIN Oberklasse:=TOberklasse.Create; Oberklasse.Unterklasse.Nr:=Random(256); END; |
Re: Klassenvariable an übergeordnete Klasse übergeben
Oh Graus :freak:, hat das einen Grund, dass du alle reservierten Worte groß schreibst?
|
Re: Klassenvariable an übergeordnete Klasse übergeben
du könntest dem Constructor der Unterklasse einfach die Oberklasse übergeben.
Delphi-Quellcode:
type
TUnterklasse = class(TIrgendwas) private fOberklasse: TOberklasse; public constructor Create(AOberklasse: TOberklasse); procedure DoAnything(); end; [...] constructor TUnterklasse.Create(AOberklasse: TOberklasse); begin inherited Create(); fOberklasse := AOberklasse; end; procedure TUnterklasse.DoAnything(); begin fOberklasse.DoAnything(); end; |
Re: Klassenvariable an übergeordnete Klasse übergeben
Ist es Absicht, dass deine TUnterklasse von TOberklasse ableitest? Dann solltest du es nämlich tunlichst vermeiden, neue Felder und Eigenschaften mit alten Namen neu einzuführen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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-2025 by Thomas Breitkreuz