Autor Beitrag
bennixview
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win Linux
Delphi Kylix
BeitragVerfasst: Do 29.07.04 09:26 
Hi, bin etwas weiter gekommen.
Da ich für meinen Logger daten per XML erhalte und ich unter umständen nicht alle daten eines Objectes Loggen möchte haben ich mir eine Loggings Maske = XMLDocument gemacht welche die zu Loggenden properties beinhaltet. So weit so super ;-) Ich hab mir nun gedacht anstelle eines wilden property arrays hänge ich einfach an jeden zu loggenden Knoten einen "XMLLogKnoten" an welcher eine Liste beinhaltet in der dann die daten des jeweiligen propertys gespeichert werden. OK ungewöhnlich aber nicht schlecht :-)

SO das Problem sieht jetzt wie folgt aus:

Ich haben eine Klasse TXMLElement welche von TXMLNode abgeleitet ist. Von dieser XMLElement hab ich jetzt mal mein LoggNode abgeleitet. also:
TXMLNode
|
TXMLElement
|
TXMLLoggingNode

so das TXMLElement hat folgende Methode:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function TXMLElement.NewChild(AClass: TXMLElementClass; AIndex: Integer = -1; ANameSpaceURI: String = ''): TXMLElement;
var
  AChild: IXMLElement;
begin
  AChild := AddChild(AClass.GetTagName, ANameSpaceURI, AClass, AIndex) as IXMLElement;
  AChild.Init;
  Result := TXMLElement(AChild.AsXMLNode);
end;


function TXMLElement.AddChild(const TagName, NamespaceURI: DOMString;
  NodeClass: TXMLNodeClass; Index: Integer): IXMLNode;
begin
  Result := inherited AddChild(TagName, NamespaceURI, NodeClass, Index);
end;



dieser übergebe ich meinen Logger :

ausblenden Delphi-Quelltext
1:
2:
  
   aXMLDocNode.NewChild('LogNode',TXMLLoggingNode,aXMLDocNode.ChildNodes.Count,'')



aber !!!! der Konstruktor meines TXMLLoggingNode wird nicht aufgerufen!! Dieser wird in TXMLNode implementiert und ich überlade ihn dann in meiner TXMLLoggingNode. Hab ein ShowMessage eingebaut um zu überprüfen ob das teil aufgerufen wird aber es tut sich nichts :-(

Wenn mir einer nen schlauen rat geben kann wäre ich dankbar !!! :-)


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 29.07.04 09:40 
Hallo!

Du musst den Konstruktor übersteuern (override), nicht überladen!

Cu,
Udontknow
bennixview Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win Linux
Delphi Kylix
BeitragVerfasst: Do 29.07.04 09:43 
Ja, hab ich auch zuerst aber dann meckert der compieler von wegen statische methoden können nicht über übersteuert (override) werden! habs auch schon mit virtual und overload virtual etc versucht!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 29.07.04 09:54 
Dann wirst du das auch nicht so hinbekommen. Wenn ein Konstruktor statisch ist, kannst du ihn nicht übersteuern, und überladen bringt nichts, da intern ja nur ein TXMLNode gesehen wird, wodann der alte Konstruktor von TXMLNode auch so aufgerufen wird. Überlege dir einen anderen Weg.

Cu,
Udontknow
bennixview Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win Linux
Delphi Kylix
BeitragVerfasst: Do 29.07.04 10:04 
also der Ur-Konstruktor sieht so aus:

Von TXMLNode:
ausblenden Quelltext
1:
2:
3:
public
    constructor Create(const ADOMNode: IDOMNode; const AParentNode: TXMLNode;
      const OwnerDoc: TXMLDocument);


Meiner von TXMLLoggingNode:
ausblenden Quelltext
1:
2:
3:
public
  constructor Create(const ADOMNode: IDOMNode; const AParentNode: TXMLNode;
      const OwnerDoc: TXMLDocument); -- over.... k.a.???


Müste hinter dem ersten nicht static stehen damit der meckert?

Hab jetzt keine idee mehr
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 29.07.04 10:20 
Nein, es muss nicht "static" dort stehen. Sofern dort nicht "virtual" oder "dynamic" steht, nimmt der Compiler an, daß es sich um eine statische Methode handelt, die dann flotter aufgerufen, aber nicht übersteuert werden kann.

Cu,
Udontknow