Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Polymorphismus-Problem


Spaceguide - So 09.04.06 21:43
Titel: Polymorphismus-Problem
Angenommen ich leite z.B. folgende Klassen ab:


Delphi-Quelltext
1:
2:
3:
4:
TShape = class
TRectangle = class(TShape)
TEllipse = class(TShape)
etc.


und übergebe eine Instanz von TRectangle an eine Prozedur

procedure DoSomething(aShape : TShape);

Delphi-Quelltext
1:
2:
3:
4:
 var clone : TShape;
begin
 clone := aShape.ClassType.Create; ???
end;


wie erzeuge ich eine weitere Instanz der übergebenen Klasse, also z.B. ein weiteres TRectangle, wenn aShape vom Typ TRectangle ist (ohne Fallunterscheidung per if/case/is)?


Allesquarks - So 09.04.06 22:15

entweder du legst eine Klassenreferenz in jede Instanz deiner Klassen myclassvariable: class of TShape
oder du erzeugst virtuelle methoden in den Klassen, da diese dann dynamisch, das heißt jede Klasse kann ihre eigene Aufrufen, dann weißt du in der Methode die Klasse die du erzeugen möchtest.


Spaceguide - So 09.04.06 23:41

Diese Klassenreferenz ist doch schon durch ClassType gegeben. Mit


Delphi-Quelltext
1:
 clone := TShape(aShape.ClassType.Create);                    


bekomme ich tatsächlich eine weitere Instanz der übergebenen Klasse. Ich muss nur einfach noch von TObject auf TShape casten.