Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Copy-Konstruktor


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;  // copy Konstruktor
            end;

    TClassB = class(TBaseClass)
               constructor.Create(aInstance:TBaseClass);overload// copy Konstruktor
            end;

    TClassC = class(TBaseClass)
               constructor.Create(aInstance:TBaseClass);overload;  // copy Konstruktor
            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));
  ..

// und nun die Kopie der gesamten Liste erstellen
  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
      // error, unkown class
    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


Narses - Mi 12.08.09 14:46

Moin!

Du hast schon einen Thread zu dem Thema, bitte da weiter diskutieren [http://www.delphi-forum.de/viewtopic.php?t=94139]. ;)

cu
Narses