AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Prism Elegante Methode für Wechsel zwischen load und loadfromfile
Thema durchsuchen
Ansicht
Themen-Optionen

Elegante Methode für Wechsel zwischen load und loadfromfile

Ein Thema von lkz633 · begonnen am 5. Feb 2004 · letzter Beitrag vom 6. Feb 2004
Antwort Antwort
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#1

Elegante Methode für Wechsel zwischen load und loadfromfile

  Alt 5. Feb 2004, 21:34
Hallo,

hat vielleicht nicht 100% was mit D8 zu tun, ich schreibs dennoch mal hier herein.

Ich benutze in einem D7 Projekt immer die IXMLDocument- Methode loadfromfile, jetzt bei D8 heisst Sie jedoch nur noch Load

Gibt es eine elegantere Methode als jetzt jedesmal wenn dies vorkommt eine bedingten Compilerdirektive einzufügen?

Gruss lkz633

PS: Hatte schon schlimmste Befürchtungen, da es ja TXMLdocument nicht mehr gibt. Auf Anfragen was ich denn dann machen muss habe ich eine umständliche Lösung über Datasets bekommen. Aber XMLdocument gibt es genauso wie gewohnt unter dem .net Framework
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Elegante Methode für Wechsel zwischen load und loadfromf

  Alt 6. Feb 2004, 01:46
Es gibt Möglichkeiten, ob sie eleganter sind darüber lässt sich streiten.

Delphi-Quellcode:

procedure TXMLDocument_LoadFromFile(XMLDocu: TXMLDocument; const FileName: String);
begin
{$IFDEF Delphi8}
  XMLDocu.Load(FileName);
{$ELSE}
  XMLDocu.LoadFromFile(FileName);
{$ENDIF} 
end;
Alle Aufrufe von XMLDocu.LoadFromFile(FileName); müssen nun in XMLDocument_LoadFromFile(XML, FileName); umgeschrieben werden, einmalig.

Delphi-Quellcode:
type
  TXMLDocument = class(TXMLBase)
    procedure XYZ1;
    procedure XYZ2; virtual;
    procedure XYZ3; dynamic;

    procedure Load(const FileName: String); virtual;
  end;

  TXMLDocumentCracker = class(TXMLBase)
    procedure XYZ1; abstract;
    procedure XYZ2; virtual; abstract;
    procedure XYZ3; dynamic; abstract;

    procedure LoadFromFile(const FileName: String); abstract;
  end;

procedure Test;
var
  XML: TXMLDocuemnt;
begin

  TXMLDocumentCracker(XML).LoadFromFile();
  
end;
Hier verwenden wir einen abstrakten Nachfahren vom gleichen Vorfahren wie die zu castende Klasse. Dabei muß unser abstrakter Nachfahre EXAKT das gleiche Interface wie die zu castende Klasse besitzen. Das enthält ALLE felder und Methoden egal ob private, protected, public oder published. Die so entstehende Signature deer Klasse ist kompatibel mit der zu castenden Klasse.

Dieser Weg ist gangbar und funktioniert auch ganz gut, trotzdem sollte er nicht benutzt werden, da bei einem weiteren Update der Klassen auch die abstrakte Typcast Klasse geändert werden muß. Da solche Änderungen auf Borland's Seite in der letzten Zeit leider immer häufiger werden, würde ich es nicht benutzen.

Gruß Hagen
  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 05:28 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