Autor Beitrag
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: So 09.04.06 21:43 
Angenommen ich leite z.B. folgende Klassen ab:

ausblenden 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);
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: So 09.04.06 23:41 
Diese Klassenreferenz ist doch schon durch ClassType gegeben. Mit

ausblenden 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.