Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objektorientierung Klasse "noch oben" casten (https://www.delphipraxis.net/152420-objektorientierung-klasse-noch-oben-casten.html)

beo 22. Jun 2010 11:31

Delphi-Version: 2005

Objektorientierung Klasse "noch oben" casten
 
Servus,

ich habe nal noch eine Frage zum Thema objektorientierung.

Delphi-Quellcode:
TFoo = class(TObject)
procedure test;
end;

TBar = class(TFoo)
procedure test; override;
end;
Wenn ich nun eine Instanz von TBar habe, und diese an eine Methode reiche, die TFoo entgegennimmt:

Delphi-Quellcode:
procedure TFooBarHandler.DoSomething(inst:TFoo)
begin
  inst.Test;
end;

FooBarHandler.DoSomething(TBar.Create);
Wie bekomme ich es hin, dass zunächst die überschriebene Methode "test" von meiner TBar-Instanz gerufen wird.


Ich möchte als quasi so was hier machen:

Delphi-Quellcode:
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;
Ich glaube ich habe nur ein Brett vorm Kopf, denn eigentlich ist doch eine völlig triviale Situation oder?

Vielen Dank dpler.

jfheins 22. Jun 2010 11:33

AW: Objektorientierung Klasse "noch oben" casten
 
Die Methode TFoo.test() muss virtuell deklariert werden!
Dann sollte es ohne Probleme gehen.

beo 22. Jun 2010 12:25

AW: Objektorientierung Klasse "noch oben" casten
 
oh, das habe ich wohl übersehen - es musste ja was dummes sein...

vielen Dank!

DeddyH 22. Jun 2010 12:29

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 16:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz