AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Klassen-Funktionen erweitern und Weitervererben
Thema durchsuchen
Ansicht
Themen-Optionen

Klassen-Funktionen erweitern und Weitervererben

Ein Thema von Sereby · begonnen am 30. Jun 2008 · letzter Beitrag vom 30. Jun 2008
Antwort Antwort
Sereby

Registriert seit: 31. Mär 2008
91 Beiträge
 
#1

Klassen-Funktionen erweitern und Weitervererben

  Alt 30. Jun 2008, 14:26
Hallo,

also ich habe eine eigene neue Unit mit ein paar erweiterungen für z.B. die TStrings Klasse
Delphi-Quellcode:
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;
So das funktioneirt auch so weit.
Vorher hatte ich das übrigens folgendermaßen geregelt (Delphi 2007)
TStringsHelper = class helper for TStrings 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

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.
TStringList = class of TStrings; unterhalb der oben dargestellten klasse schreibe dann wirft er mir folgendes an den Kopf:
Zitat:
[Pascal Fehler] ClassHelpers.pas(157): E2037 Deklaration von 'GetSimilarLines' unterscheidet sich von vorheriger Deklaration
Ich hoffe ihr könnt mir da weiterhelfen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Klassen-Funktionen erweitern und Weitervererben

  Alt 30. Jun 2008, 14:30
TStringList ist ja ein Nachfahre von TStrings.

wenn du eine eigen Ableitung willst

TMyStringList = class (TStrings)

Zitat:
Aber da ich gehört hab dass das vllt in der nächsten Delphi Version nicht mehr vorhanden ist
Wo hast du das gehört?
Markus Kinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Klassen-Funktionen erweitern und Weitervererben

  Alt 30. Jun 2008, 14:35
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Sereby

Registriert seit: 31. Mär 2008
91 Beiträge
 
#4

Re: Klassen-Funktionen erweitern und Weitervererben

  Alt 30. Jun 2008, 14:39
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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Klassen-Funktionen erweitern und Weitervererben

  Alt 30. Jun 2008, 14:45
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Klassen-Funktionen erweitern und Weitervererben

  Alt 30. Jun 2008, 14:45
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.
Markus Kinzler
  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 16:36 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