![]() |
von TCustomIniFile ableiten und auf alle Ini-Typen anwenden
Hallo,
ich möchte gerne IniDateien um ein paar Methoden erweitern. Dies soll dann allgemein für alle von TCustomIniFile abgeleiteten IniFiles-Klassen möglich sein (TIniFile, TMemIniFile, TRegistryIniFile, ...). Nun weiß ich aber leider nicht so ganz, wie ich das anstellen soll. Folgender Beispielcode soll das verdeutlichen, was ich umsetzen will:
Delphi-Quellcode:
Oder auch so etwas funktioniert leider nicht:
type
TMyCustomIniFile = class(TCustomIniFile) public procedure WriteMyString; end; // nun sollen die Erweiterungen z.B. auf TIniFile, TMemIniFile etc. angewendet werden TMyIniFile = class(TIniFile, TMyCustomIniFile); // geht leider nicht implementation procedure TMyCustomIniFile.WriteMyString; begin WriteString('My', 'String', 'Hello world!'); end;
Delphi-Quellcode:
Nun habe ich mir überlegt, dass meine TMyCustomIniFile einfach im Konstruktor eine Instanz von einer von TCustomIniFile abgeleiteten Klasse übergeben bekommt und auf diese alle abstrakten Methoden anwendet, etwa so:
var ini: TMyCustomIniFile;
begin ini := TMemIniFile.Create('test.ini'); // ... end;
Delphi-Quellcode:
Hier gibt es nur das Problem, wenn in der von TCustomIniFile abgeleiteten Klasse, von der im Konstruktor eine Instanz übergeben wurde, eine Methode überschrieben wurde (z.B. WriteInteger bei TRegistryIniFile).
type
TMyCustomIniFile = class(TCustomIniFile) private FIniFile: TCustomIniFile; public constructor Create(IniFile: TCustomIniFile); procedure WriteString(const Section, Ident, Value: String); override; // und für alle weiteren abstrakten Methoden procedure WriteMyString; end; implementation constructor TMyCustomIniFile.Create(IniFile: TCustomIniFile); begin inherited Create(IniFile.FileName); FIniFile := IniFile; end; // das ganze für alle abstrakten Methoden procedure TMyCustomIniFile.WriteString(const Section, Ident, Value: String); begin FIniFile.WriteString(Section, Ident, Value); end; procedure TMyCustomIniFile.WriteMyString; begin WriteString('My', 'String', 'Hello world!'); end; Eine letzte Möglichkeit die mir einfällt: TMyCustomIniFile nicht von TCustomIniFile abzuleiten (einfach nur von TObject) und eben nur die neuen Methoden implementieren, evtl. dann noch eine Methode GetIniFile um auf die "normalen" Methoden einer (der übergebenen) IniDatei zuzugreifen. Nun die eigentliche Frage: Gibt es hier möglicherweise eine ganz einfache Lösung, die ich übersehen habe? Wie würdet ihr so etwas lösen? |
Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
|
Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
Super, danke :thumb:
Funktioniert ausgezeichnet :bounce1: So habe ich es jetzt gemacht:
Delphi-Quellcode:
Funktioniert allerdings nicht unter Delphi 7, gibt es da noch keine Class Helper ?
type
TMyHelperIniFile = class helper for TCustomIniFile public procedure WriteMyString; end; implementation procedure TMyHelperIniFile.WriteMyString; begin WriteString('My', 'String', 'Hello world!'); end; Zitat:
|
Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
class helper for... wurde eigentlich für .NET gemacht und ist wohl erst in den Delphi-Versionen, die auch .NET unterstützen, denk ich mal.
|
Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
Lies dir den verlinkten Artikel durch, da steht es.
|
Re: von TCustomIniFile ableiten und auf alle Ini-Typen anwen
Zitat:
Macht ja nichts, Delphi 7 benutze ich sowieso nur noch selten. Vorwiegend Turbo Delphi (BDS 2006). Danke nochmal an alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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-2025 by Thomas Breitkreuz