![]() |
Delphi-Version: 2005
Objektorientierung Klasse "noch oben" casten
Servus,
ich habe nal noch eine Frage zum Thema objektorientierung.
Delphi-Quellcode:
Wenn ich nun eine Instanz von TBar habe, und diese an eine Methode reiche, die TFoo entgegennimmt:
TFoo = class(TObject)
procedure test; end; TBar = class(TFoo) procedure test; override; end;
Delphi-Quellcode:
Wie bekomme ich es hin, dass zunächst die überschriebene Methode "test" von meiner TBar-Instanz gerufen wird.
procedure TFooBarHandler.DoSomething(inst:TFoo)
begin inst.Test; end; FooBarHandler.DoSomething(TBar.Create); Ich möchte als quasi so was hier machen:
Delphi-Quellcode:
Ich glaube ich habe nur ein Brett vorm Kopf, denn eigentlich ist doch eine völlig triviale Situation oder?
TFBClass = class of TFoo;
procedure TFooBarHandler.DoSomething(inst:TFoo) var c:TFBClass; begin c := TFoo.GetClassInfo; // <- liefert z.b. TBar c(inst).Test; // <- cast zu einer klasse, die erst zur laufzeit bekannt ist. end; Vielen Dank dpler. |
AW: Objektorientierung Klasse "noch oben" casten
Die Methode TFoo.test() muss virtuell deklariert werden!
Dann sollte es ohne Probleme gehen. |
AW: Objektorientierung Klasse "noch oben" casten
oh, das habe ich wohl übersehen - es musste ja was dummes sein...
vielen Dank! |
AW: Objektorientierung Klasse "noch oben" casten
Hätte der Compiler nicht schon von sich aus meckern müssen? "Eine nicht-virtuelle Methode kann nicht überschrieben werden." oder so ähnlich?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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