Geri - Mi 12.08.09 14:42
Titel: Copy-Konstruktor
Hallo zusammen
Ich habe mehrere Klassen, welche von einander abgeleitet sind. Jede der Klasse wurde mit einem Copy-Constructor ausgesattet.
Nun habe ich in einer Liste Instanzen der verschiedenen Klassen und möchte eine Kopie der gesamten Liste erstellen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| type TBaseClass = class mValue:Integer; constructor.create(aValue);overload; constructor.Create(aINstance:TBaseClass);overload; end;
TClassB = class(TBaseClass) constructor.Create(aInstance:TBaseClass);overload; end;
TClassC = class(TBaseClass) constructor.Create(aInstance:TBaseClass);overload; end; var BaseList:Tlist; i:Integer; copyList:Tlist; Element:TBaseClass; begin BaseList:=TList.Create(); BaseList.add(TBaseClass.Create(123)); BaseList.add(TClassB.Create(456)); BaseList.add(TClassC.Create(789)); ..
CopyList:=TList.Create(); for i:= 0 to BaseList.Count-1 do Begin Element:=BaseList[i] if Element.classtype = TBaseClass then CopyList.add(TBaseClass.Create(Element)) else if Element.classtype = TClassB then CopyList.add(TBaseB.Create(Element)) else if Element.classtype = TClassC then CopyList.add(TBaseC.Create(Element)) else Begin end; end; End; |
Gibt es vielleicht eine Möglichekeit die Abfrage der gesamten Klassen zu vermeiden und gleich den richtigen Constructor aufzurufen?
Etwas ähnliches wie vielleicht:
Delphi-Quelltext
1:
| CopyList.Add((Element.ClassType).Creat(Element)) ??? |
Fehlen mir evtl. in den Konstruktoren nur ein paar overrides :)?
Vielen Dank für ein paar hilfreiche Tipps im Voraus
Geri