Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klassenvariable an übergeordnete Klasse übergeben (https://www.delphipraxis.net/114895-klassenvariable-uebergeordnete-klasse-uebergeben.html)

DevidEspenschied 2. Jun 2008 14:56


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:
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;
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.

Wenn ich das Property nach der Create-Funktion zuweise, kann ich es in Create ja nicht weiterverarbeiten...

mkinzler 2. Jun 2008 15:03

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;

spaxxn 2. Jun 2008 15:20

Re: Klassenvariable an übergeordnete Klasse übergeben
 
Oh Graus :freak:, hat das einen Grund, dass du alle reservierten Worte groß schreibst?

SirThornberry 2. Jun 2008 15:27

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;

Apollonius 2. Jun 2008 16:59

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