![]() |
Klassen-Typ als Parameter?
Hallo,
ich "bastel" gerade an einer Vorbereitung zu einem neuen Projekt und habe dabei folgende Konstruktion:
Delphi-Quellcode:
In einigen Konstruktoren muss ich Objekte erzeugen, wobei der Source für einige Teile nahezu identisch ist. Da ich es hasse, immer fast gleichen Source zu schreiben, möchte ich da optimieren. Das Problem ist dabei, dass ich in diesen kurzen Blocken auch unterschiedliche Klassen verwende:
tBase = class(TObject)
private end; tBaseDesc1 = class(tBase) private public constructor Create(aXMLNode : IXMLNode); virtual; destructor Destroy; override; end; tBaseDesc2 = class(tBase) private public constructor Create(aXMLNode : IXMLNode); virtual; destructor Destroy; override; end; // u.s.w. (ca. 80 Ableitungen von tBase)
Delphi-Quellcode:
Mein Ziel ist es, dafür eine Methode zu haben, die mir fBaseDescX liefert. Dabei müsste ich als Parameter folgendes übergeben:
// vNL : IXMLNodeList;
if Assigned(vNL.FindNode('MyNodeName')) then begin fBaseDescX := tBaseDescX.Create(vNL.FindNode('MyNodeName')); end else begin fBaseDescX := nil; end; - MyNodeName - vNL - tBaseDescX Die ersten Beiden sind ja kein Problem, aber bei dem Klassen-Typ fällt mir nichts brauchbares ein. Habt Ihr Anregungen oder Lösungen dafür? |
AW: Klassen-Typ als Parameter?
Ungefähr so:
Delphi-Quellcode:
TBaseClass = class of tBase;
TBase = class(TObject) private public constructor Create(aXMLNode : IXMLNode); virtual; abstract; // abstract kann entfallen, wenn hier schon gemeinsamer Code hin kann end; TBaseDesc1 = class(TBase) private public constructor Create(aXMLNode : IXMLNode); override; destructor Destroy; override; end; TBaseDesc2 = class(TBase) private public constructor Create(aXMLNode : IXMLNode); override; destructor Destroy; override; end; function MakeInstance(vNL : IXMLNodeList; const MyNodeName: string, MyClass: TBaseClass): TBase; var node: IXMLNode; begin node := vNL.FindNode(MyNodeName); if Assigned(node) then begin fBaseDescX := MyClass.Create(node); end else begin fBaseDescX := nil; end; end; |
AW: Klassen-Typ als Parameter?
Danke für den Ansatz, Uwe.
Ich werde mal damit experimentieren. Ergebnisse, bzw. Fragen werde ich dann hier eintragen. [EDIT] Mit der richtigen Zuweisung des Result und anschließendem TypeCast funktioniert es jetzt wie gewünscht. |
AW: Klassen-Typ als Parameter?
Eventuell wären Interfaces und/oder Generics in diesem Zusammenhang noch interessant da du schreibst, dass Codeteile nahezu identisch sind.
|
AW: Klassen-Typ als Parameter?
Generics setze ich dort zum Teil auch schon ein. Ich habe hier nur einen kleinen Ausschnitt dargestellt, um es nicht zu unübersichtlich zu machen. :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 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 by Thomas Breitkreuz