![]() |
Klassen-Funktionen erweitern und Weitervererben
Hallo,
also ich habe eine eigene neue Unit mit ein paar erweiterungen für z.B. die TStrings Klasse
Delphi-Quellcode:
So das funktioneirt auch so weit.
TStrings = class(Classes.TStrings)
public function IndexOf2(AKey: String): Integer; function GetLineByPos(const MyPosition: Integer): Integer; procedure GetSimilarLines(const ALikeKey: String; var AddToList: TStringList); function DelLine(const AKey: String): Boolean; function LineExist(const AKey: String): Boolean; end; Vorher hatte ich das übrigens folgendermaßen geregelt (Delphi 2007)
Delphi-Quellcode:
Aber da ich gehört hab dass das vllt in der nächsten Delphi Version nicht mehr vorhanden ist und da ich das gerne Delphi 5(,6 oder 7) Kompatiblel hätte, wollte ich es gleich richtig machen :-)
TStringsHelper = class helper for TStrings
Naja ich möchte jedenfalls, dass die selben funktionen auch bei TStringList, welche ja von TStrings abgeleitet ist, vorhanden sind. Allerdings ohne diese neu zu definieren wie oben also sodass ich den code nicht doppelt schreiben muss. wenn ich z.B.
Delphi-Quellcode:
unterhalb der oben dargestellten klasse schreibe dann wirft er mir folgendes an den Kopf:
TStringList = class of TStrings;
Zitat:
|
Re: Klassen-Funktionen erweitern und Weitervererben
TStringList ist ja ein Nachfahre von TStrings.
wenn du eine eigen Ableitung willst TMyStringList = class (TStrings) Zitat:
|
Re: Klassen-Funktionen erweitern und Weitervererben
Wenn du alle TStrings-Nachfahren erweitern willst, musst du Class Helper verwenden. Andernfalls müsstest du von jeder Klasse einzeln ableiten, was weder praktikabel noch immer möglich ist.
|
Re: Klassen-Funktionen erweitern und Weitervererben
Ist mir durchaus bewusst, dass das ein nachfahre ist.. allerdings dachte ich ich könnte das originale TStringList so "überschreiben" wie ich es mit TStrings getan habe nur ohne den gleichen Code nochmal schreiben zu müssen. Geht das? weil ich wollte vermeiden überall wo ich TStringList verwendet habe jetzt TStringList2 oder ähnliches zu verwenden!
Und das hat mir mein Arbeitskollege hier gesagt ^_^ Ich weiss nicht woher er diese Info hat aber er meinte dass das nur ne Übergangslösung gewesen sei zu der zeit als Delphi 2006 gekommen ist. was ist denn eigentlich besser? TStrings = class(Classes.TStrings) oder class helper? Also bei Classhelper weiss ich dass es funktioniert, allerdings ist es nicht mit Delphi 5 oder ähnlichem kompatibel. Gibts da irgendwelche vor- bzw nachteile? |
Re: Klassen-Funktionen erweitern und Weitervererben
Class Helper sollte man vermeiden, wenn es um eigenen Code geht. An dieser Stelle musst du dich aber in eine fremde Klassenhierarchie einklinken, und dafür sind Class Helper die einzige Lösung. Du könntest zwar in eigenem Code immer eine eigene TStringList-Klasse verwenden, aber die VCL und Fremdcode werden natürlich weiterhin die alte Version verwenden, was nicht der Sinn der Sache war.
Class Helper können in einer neuen Delphi-Version nicht einfach abgeschafft werden. Das würde die Abwärtskompatibilität zerstören, und es gibt auch keinen vernünftigen Grund dafür. Ursprünglich stammen Class Helper aus .NET, aber wie einige andere Dinge gibt es sie nun auch für Win32. |
Re: Klassen-Funktionen erweitern und Weitervererben
Class Helper haben den Vorteil, das man mit ihnen zur Laufzeit Klassen erweitern kann. Man kann so auch finale/sealed Klassen erweitern, welche man nicht mehr ableiten kann.
Class Helpers sind aber nicht so flexibel. Man kann z.B. nur neue Eigenschaften/Methoden hinzufügen, keine überdecken oder überladen. Ausserdem muss ja in jeder Unit die entsprechende Unit eingebunden werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 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 by Thomas Breitkreuz