![]() |
Einmaliges Casten einer Vererbung?
Hallo Zusammen!
Gegeben sein eine Klasse
Delphi-Quellcode:
An jeder Stelle wo ich also auf "nichtInRoot" zugreifen will muss ich also schreiben:
type
TMyRoot = Class end; TFoo = class(TMyRoot) private Fb : boolean; Public Property nichtInRoot : Boolean read Fb write Fb; end; TBaa = class Private FAkt : TMyRoot; public Property Akt : TMyRoot : read FAkt write FAkt; end;
Delphi-Quellcode:
Gibt es nicht eine Möglichkeit nach dem Motto:
if TFoo(Baa.Akt).nichtInRoot then
Delphi-Quellcode:
schreiben zu können?
Baa.AktType := TFoo;
if Baa.ConvertedAkt.nichtInRoot then Oder: Ich müsste doch "eigentlich" nur dem TMyRoot den aktuellen typen mitteilen, oder?
Delphi-Quellcode:
Geht das?
Procedure Notify(Sender : TMyRoot);
begin if Sender.AktType.nichtInRoot then end; Mavarik |
AW: Einmaliges Casten einer Vererbung?
Oder die Eigenchaft nach oben verlagern.
|
AW: Einmaliges Casten einer Vererbung?
Mir ist der große Zusammenhang nicht nicht klar, aber ich sehe da ein Problem, wenn der Compiler entscheiden muss, welcher Typ denn zur Laufzeit wirklich dahinter steckt. Laut Deklaration der Klasse TBaa ist Akt immer ein TMyRoot, aber nur vielleicht ein TFoo. Wenn das immer ein TFoo ist, dann deklarier das doch einfach so. Wenn das nicht so geht, du aber sicherstellen kannst, daß Akt immer ein TFoo ist, dann schreib dir einen Class-Helper, der dir ein Property AktFoo: TFoo bereitstellt und das Casting von Akt in einem Getter erledigt.
Delphi-Quellcode:
Die Verwendung von
type
TBaaHelper = class helper for TBaa private function GetAktFoo: TFoo; public property AktFoo: TFoo read GetAktFoo; end; function TBaaHelper.GetAktFoo: TFoo; begin result := Akt as TFoo; end;
Delphi-Quellcode:
statt einem harten Cast hat noch den Charme einer Exception, falls es mal nicht klappt.
as
|
AW: Einmaliges Casten einer Vererbung?
Zitat:
Ist auf jeden Fall ne Lösung, Danke Mavarik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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