![]() |
Property vererben
Hi,
hier erstmal folgender Code, der das Problem relativ einfach beschreibt:
Delphi-Quellcode:
Wenn test jetzt vom Typ TKlasse ist, dann funktioniert das ganze, Ergenbis ist dann:
type TRec1 = record
dertext : string; procedure ShowText; end; type TRec2 = record dertext : string; procedure ShowText; end; type TKlasse = class private FText : string; FDaten : TRec1; procedure SetText(Value : string); public property Text : string read FText write SetText; property Daten : TRec1 read FDaten; end; type TSubKlasse = class (TKlasse) private FDaten : TRec2; public property Daten : TRec2 read FDaten; end; //... { TRec1 } procedure TRec1.ShowText; begin Showmessage('Rec1 '+dertext); end; { TRec2 } procedure TRec2.ShowText; begin Showmessage('Rec2 '+dertext); end; procedure TForm1.Button1Click(Sender: TObject); begin test := TSubKlasse.Create; test.Text := 'asdf'; test.Daten.ShowText; test.Free; end; { TKlasse } procedure TKlasse.SetText(Value: string); begin FDaten.dertext := value; FText := text; end; Rec1 asdf Wenn test allerdings vom Typ TSubKlasse ist, dann funktioniert das ganze nicht mehr, es erscheint nur Rec2 Klar, (F)Daten überschreibe ich, ist ja ein neuer Typ. Aber F(Text) und SetText bleibt doch im Prinzip gleich oder??? Thx, bin mir sicher das die Antwort jedem der OOP besser beherrscht (davon gibts sicher viele^^) schnell einfällt. Lg, Flips |
Re: Property vererben
ein Property kann man nicht überschreiben, es ist ja schließlich nur ein Alias auf Funktionen oder eine Variable. Wenn du auf die Variable zugreifen willst worauf das Property mit gleichem Namen der Elternklasse zeigt (also welches VERDECKT wird) dann brauchst du einfach nur auf die Elternklasse casten.
|
Re: Property vererben
Irgendwie leuchtet es mir nicht ein^^
Mit "Elternklasse casten" meinst du doch test := TKlasse.Create; oder wie versteh ich das? Dann ist ja von der Subklasse nichts mehr da. Vielleicht sollte ich erwähnen, dass Rec1 später größtenteils andere Eigenschaften hat als Rec2. |
Re: Property vererben
Mit Elternklasse casten wird er wohl etwas wie
Delphi-Quellcode:
meinen.
TElternKlasse(self).Eigenschaft
|
Re: Property vererben
Das einzige was ich mir vorstellen könnte wäre sowas, aber ich denke es ist falsch da es nicht geht :-)
Delphi-Quellcode:
{ TKlasse }
procedure TKlasse.SetText(Value: string); begin TKlasse(self).FDaten.dertext := value; TKlasse(self).FText := text; end; |
Re: Property vererben
mach aus dem records klassen.
erzeuge einen vorfahren von beiden objekten. dann kannst du das dem property zuweisen. andere möglichkeit: die nutzt 2 funktionen (get/set) welche überladen sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 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