Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TXMLDocument vs. IXMLDocument (https://www.delphipraxis.net/8271-txmldocument-vs-ixmldocument.html)

chris_82 1. Sep 2003 12:46


TXMLDocument vs. IXMLDocument
 
Worin besteht der Unterschied??

sakura 5. Sep 2003 18:54

Re: TXMLDocument vs. IXMLDocument
 
*g*

Eine Variable vom Typ TXMLDocument ist ein Pascal(Delphi)-Objekt.
Eine Variable vom Typ IXMLDocument ist ein COM-Interface.

Wenn Du nur innerhalb von einer Delphi-Anwedung arbeitest ist TXMLDocument wahrscheinlich besser, da es schneller ist. Wahrscheinlich deshalb, da ich mir nicht sicher bin, wie Du es am besten nutzt :mrgreen:

Wenn Du die Objekte zwischen Anwendungen hin und her schieben musst, dann ist IXMLDocument besser, da es einerseits dem Betriebssystem "von selbst erklären" kann, wie es zu handhaben ist und andererseits das Objekt automatisch freigegeben wird, wenn der letzte damit fertig ist.

...:cat:...

chris_82 6. Sep 2003 11:22

Re: TXMLDocument vs. IXMLDocument
 
Ok, danke, ich glaub ich habs kapiert :idea:

Elmariachi 7. Okt 2013 11:20

AW: TXMLDocument vs. IXMLDocument
 
Das ist jetzt gerade 10 Jahre alt geworden, aber ich möchte hier trotzdem nochmal nachhaken. Für gewöhnlich ist es ja so, man deklariert ein IXMLDocument und erzeugt dann darauf ein TXMLDocument

Code:
var
XMLDoc:IXMLDocument;
begin
XMLDoc:=TXMLDocument.Create(nil);
...
TXMLDocument erbt ja von TComponent und implementiert zusätzlich IInterface, IXMLDocument (und IXMLDocumentAccess).

XMLDoc ist nach dem Create ein TXMLDocument, verhält sich aber wie ein Interface inkl. automatischer Referenzzählung? Und diese löscht dann automatisch auch den TComponent/TXMLDocument-Teil, der nicht zum IXMLDocument dazugehört wenn XMLDoc auf Nil gesetzt wird?

Ist das so richtig oder verhält sich die Sache anders?

Der schöne Günther 7. Okt 2013 12:39

AW: TXMLDocument vs. IXMLDocument
 
Deine lokale Variable ist vom Typ
Delphi-Quellcode:
IXMLDocument
. Damit greift ARC schon.
Du musst auch nichts auf nil setzen, das Verlassen des Gültigkeitsbereichs (also hier dem Ende der Methode) reicht auch schon.

Gibt es einen Grund speziell für
Delphi-Quellcode:
TXMLDocument.Create(nil)
? Weil ich sehe eigentlich nur immer
Delphi-Quellcode:
XMLDoc:=NewXMLDocument();
...

"den TComponent/TXMLDocument-Teil, der nicht zum IXMLDocument dazugehört" - Wenn der Referenzzähler beim Verlassen der Methode dekrementiert wird, fällt auf, dass sich niemand mehr für das Dokument interessiert. Der Destruktor der Instanz wird aufgerufen. Alles wird zerstört.

Elmariachi 7. Okt 2013 13:10

AW: TXMLDocument vs. IXMLDocument
 
Zitat:

Gibt es einen Grund speziell für TXMLDocument.Create(nil) ?
Embarcadero hat das selbst so in den Beschreibungen drin, siehe Link und man findet es auch sonst oft wenn man danach sucht.

http://docwiki.embarcadero.com/CodeE...e_%28Delphi%29

Mit NewXMLDocument ist alles logisch, weil das ein IXMLDocument zurückgibt. Was mich wirsch macht ist, dass man eine Variable vom Typ IXMLDocument, also ein Interface hat, aber ein Objekt aus der Klasse TXMLDocument erzeugt und dieser zuweist. Mich interessiert, was mit diesem Objekt passiert. Meine derzeitige Interpretation ist, dass das Interface wie eine Oberklasse funktioniert, der ich ja auch abgeleitete Klassen zuweisen kann. Und je länger ich drüber nachdenke, desto mehr Sinn ergibt das :-D


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