AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klassen-Typ als Parameter?

Ein Thema von Jasocul · begonnen am 14. Sep 2017 · letzter Beitrag vom 14. Sep 2017
Antwort Antwort
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#1

Klassen-Typ als Parameter?

  Alt 14. Sep 2017, 08:43
Hallo,
ich "bastel" gerade an einer Vorbereitung zu einem neuen Projekt und habe dabei folgende Konstruktion:
Delphi-Quellcode:
  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)
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:
Delphi-Quellcode:
// vNL : IXMLNodeList;
   if Assigned(vNL.FindNode('MyNodeName')) then
   begin
     fBaseDescX := tBaseDescX.Create(vNL.FindNode('MyNodeName'));
   end
   else
   begin
     fBaseDescX := nil;
   end;
Mein Ziel ist es, dafür eine Methode zu haben, die mir fBaseDescX liefert. Dabei müsste ich als Parameter folgendes übergeben:
- 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?
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Klassen-Typ als Parameter?

  Alt 14. Sep 2017, 08:56
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Klassen-Typ als Parameter?

  Alt 14. Sep 2017, 09:03
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.
Peter

Geändert von Jasocul (14. Sep 2017 um 10:04 Uhr) Grund: Ergebnis
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Klassen-Typ als Parameter?

  Alt 14. Sep 2017, 10:04
Eventuell wären Interfaces und/oder Generics in diesem Zusammenhang noch interessant da du schreibst, dass Codeteile nahezu identisch sind.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Klassen-Typ als Parameter?

  Alt 14. Sep 2017, 10:11
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.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 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