Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   class reference als Parameter übergeben (https://www.delphipraxis.net/162750-class-reference-als-parameter-uebergeben.html)

Tobinator 4. Sep 2011 14:57

class reference als Parameter übergeben
 
Hi,

wie kann ich als Parameter einer Procedure eine Class Reference übergeben?

Konkret:
ich habe eine Klasse (TMyClassA) von der ich einige Nachfahren (TMyClassB, TMyClassC) ableite. Diese sollen dann in einer Liste gespeichert werden (TMyClassList). Diese Liste kann TMyClassA Objekte (und damit auch deren Nachfahren) speichern.
Nun soll die Liste eine Funktion haben, mit der sie selbst Objekte erzeugt, sie mit Daten aus einer Datenbank füllt und dann speichert. Dafür muss TMyClassList ja irgendwann
Delphi-Quellcode:
tmp:=TMyClassB.Create;
oder
Delphi-Quellcode:
tmp:=TMyClassC.Create;
aufrufen.

Jetzt meine Frage: wie kann ich TMyClassB oder TMyClassC als Parameter übergeben, damit die Liste nun genau weis, was sie erzeugen soll?

Ich hab schon gesucht, bin aber nicht so recht füngig geworden.

PS: wenn ich eine Instanz übergebe und dann z.B.
Delphi-Quellcode:
tmp:=AObj.Create
aufrufe, dann haben alle Elemente der Liste die gleichen werte. Es ist also sozusagen alles die gleiche Instanz.

Danke schonmal,

Tobi.

Uwe Raabe 4. Sep 2011 15:02

AW: class reference als Parameter übergeben
 
Deklariere einen Klassentyp:

Delphi-Quellcode:
TMyClassAClass = class of TMyClassA;


und verwende diese als Typ des Parameters.

USchuster 4. Sep 2011 15:07

AW: class reference als Parameter übergeben
 
Hatte gerade das getippt und das geht als Ergänzung zu Uwe durch...

Delphi-Quellcode:
program Project22;

{$APPTYPE CONSOLE}

type
  TClassA = class(TObject);

  TClassAClass = class of TClassA;

  TClassB = class(TClassA);

  TClassC = class(TClassA);

procedure CreateClassA(AClassType: TClassAClass);
var
  Instance: TClassA;
begin
  Instance := AClassType.Create;
  try
    WriteLn('ClassName: ', Instance.ClassName);
  finally
    Instance.Free;
  end;
end;

begin
  CreateClassA(TClassB);
  CreateClassA(TClassC);
  ReadLn;
end.
Was den folgenden Output erzeugt:
Code:
ClassName: TClassB
ClassName: TClassC

Tobinator 4. Sep 2011 15:20

AW: class reference als Parameter übergeben
 
Ok, super, funktioniert

Danke und viele Grüße.


EDIT:
Sry, doch noch nicht gelöst:
Es wird immernoch der Constructor von TMyClassA aufgerufen.
Wie kann ich das ändern?

FredlFesl 4. Sep 2011 15:56

AW: class reference als Parameter übergeben
 
virtual Constructor

Tobinator 4. Sep 2011 16:01

AW: class reference als Parameter übergeben
 
genau das hab ich gesucht, danke :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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