![]() |
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:
oder
tmp:=TMyClassB.Create;
Delphi-Quellcode:
aufrufen.
tmp:=TMyClassC.Create;
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:
aufrufe, dann haben alle Elemente der Liste die gleichen werte. Es ist also sozusagen alles die gleiche Instanz.
tmp:=AObj.Create
Danke schonmal, Tobi. |
AW: class reference als Parameter übergeben
Deklariere einen Klassentyp:
Delphi-Quellcode:
TMyClassAClass = class of TMyClassA;
und verwende diese als Typ des Parameters. |
AW: class reference als Parameter übergeben
Hatte gerade das getippt und das geht als Ergänzung zu Uwe durch...
Delphi-Quellcode:
Was den folgenden Output erzeugt:
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.
Code:
ClassName: TClassB
ClassName: TClassC |
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? |
AW: class reference als Parameter übergeben
virtual Constructor
|
AW: class reference als Parameter übergeben
genau das hab ich gesucht, danke :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz