AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Warum TStrings erstellen mit TStringList.Create?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum TStrings erstellen mit TStringList.Create?

Ein Thema von Guido Eisenbeis · begonnen am 2. Jan 2010 · letzter Beitrag vom 5. Jan 2010
Antwort Antwort
Seite 1 von 3  1 23      
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:02
Auszug aus der Turbo-Delphi-Hilfe, Thema "Eine neue Stringliste erstellen":

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var TempList: TStrings; { Liste deklarieren }
begin
  TempList := TStringList.Create; { Listenobjekt erzeugen }
  try { Stringliste verwenden }
  ...
So Leute, heut bin ich wieder am Grübeln. Immer wieder begegnen mir Codes, in denen Variablen als TStrings deklariert, aber mit TStringList.Create erstellt werden!? In dem obigen Beispiel wird, außer in dem Code-Schnipsel, auch noch im Beschreibungstext explizit darauf hingewiesen:

Code:
So erstellen Sie langlebige Stringlisten:
 
1. Fügen Sie in der Unit-Datei für das Hauptformular Ihrer Anwendung ein Feld des Typs TStrings in die Formulardeklaration ein.

2. ...
Gibt es dafür einen Grund, dass TStringList-en als TStrings deklariert werden? Spricht etwas dagegen, eine TStringList auch mit TStringList zu dekalrieren? Was ist besser?

Guido.

Edit: Mir ist bekannt, dass TStrings die Basisklasse, und TStringList davon abgeleitet ist.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:04
TStrings ist die abstrakte Basisklasse von TStringList
Du kannst den Typ natürlich auch alsn TStringList deklariere
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:12
Oder besser gesagt: TStrings ist eine abstrakte Basisklasse, welche eine gemeinsame Schnittstelle bietet und selber keine Speicherverwaltung hat.

TStringList ist ein Nachfahre davon ... es gibt noch andere Nachfahren (wie sich z.B. eine hinter .Lines eines TMemo versteckt)



Wenn du selber die TempList nur als TStringList verwendest und sie nicht weitergibst, dann kannst du sie auch direkt als TStringList deklarieren und hast dann auch direkten Zugriff auf spezielle Erweiterungen der TStringList.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:16
Ich meine neulich mal etwas bzgl. (Abwärts-)Kompatibilitätsgründen (der Delphi-IDEs) gelesen zu haben, finde es aber leider nicht mehr
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:22
Zitat von mkinzler:
TStrings ist die abstrakte Basisklasse von TStringList
Hallo Markus. Als hätte ich's geahnt! Siehe mein "Edit" oben. Deine Antwort kam gerade, als ich den Senden-Button geklickt hab.


Zitat von mkinzler:
Du kannst den Typ natürlich auch alsn TStringList deklariere
Ok, das ist ja schon mal was! Und wie sieht es mit dem oben beschriebenen mischen aus? Warum trifft man das immer wieder mal an?


Zitat von himitsu:
Wenn du selber die TempList nur als TStringList verwendest und sie nicht weitergibst, dann kannst du sie auch direkt als TStringList deklarieren und hast dann auch direkten Zugriff auf spezielle Erweiterungen der TStringList.
Hm, ... das ist mir noch nicht ganz klar. Ich verstehe das jetzt mal so, dass man evtl. keine TStringList übergeben kann, wenn TStrings verlangt wird, oder umgekehrt. Aber: Beißt sich da nicht die Katze selbst in den Schwanz, denn wenn man eine als TStrings deklarierte Variable aber beim Instanzieren mit TStringList erstellt, dann ist doch da der Typ festgelegt. Dann kann man das doch auch nicht mehr als TStrings übergeben, oder?


Zitat von s.h.a.r.k:
Ich meine neulich mal etwas bzgl. (Abwärts-)Kompatibilitätsgründen (der Delphi-IDEs) gelesen zu haben, finde es aber leider nicht mehr
War mein erster Gedanke, deshalb hab ich mich auch entschlossen zu posten.

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:23
Zitat von s.h.a.r.k:
Ich meine neulich mal etwas bzgl. (Abwärts-)Kompatibilitätsgründen (der Delphi-IDEs) gelesen zu haben, finde es aber leider nicht mehr
Nee nee,

wenn du z.B. diese Prozedur erstellst,
procedure MyProc(List: TStrings); dann kannst du ihr alle Nachfahren von Strings übergeben.
also z.B. TStringList oder TMemoStrings (die interne virtuelle Stringliste des Memos, mit Umleitung zur Memokomponente von Windows)

Wenn man jetzt sowas macht,
procedure MyProc(List: TStringList); dann kann man dieser Funktionen nur noch eine TStringList und deren Nachfahren übergeben,
aber z.B. kein Memo.Lines mehr.

Zitat:
Hm, ... Grübelnd... das ist mir noch nicht ganz klar.
TStringList hat ein paar zusätzliche Funktionen, an welche du mit der Variable als TStrings natürlich nur über eine Typumwandlung rankommst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:48
Zitat von himitsu:
Wenn man jetzt sowas macht,
procedure MyProc(List: TStringList); dann kann man dieser Funktionen nur noch eine TStringList und deren Nachfahren übergeben,
aber z.B. kein Memo.Lines mehr.
So langsam kommt Klarheit in die Sache! Man kann also einen kleinen Eimer (Nachfahre) in einen großen Eimer (Basisklasse) stecken.

Das hab ich auch gerade getestet. Das eine (TStrings übergeben, wenn TStringList verlangt wird) wird verweigert, während das umgekehrte funktioniert.


Zitat von himitsu:
Zitat:
Hm, ... Grübelnd... das ist mir noch nicht ganz klar.
TStringList hat ein paar zusätzliche Funktionen, an welche du mit der Variable als TStrings natürlich nur über eine Typumwandlung rankommst.
Hoppla, gut zu wissen! Also zum Beispiel per TypeCast: TStringList(List).Sort ?
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:56
Ok, bleibt immer noch die Ausgangs-Frage: Warum eine Variable als TStrings deklarieren, wenn mit TStringList instanziert wird?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#9

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 14:56
Zitat von Guido Eisenbeis:
So langsam kommt Klarheit in die Sache! Man kann also einen kleinen Eimer (Nachfahre) in einen großen Eimer (Basisklasse) stecken.

Das hab ich auch gerade getestet. Das eine (TStrings übergeben, wenn TStringList verlangt wird) wird verweigert, während das umgekehrte funktioniert.
Jupp, denn TStringList kann alles, was auch TStrings kann (und noch etwas mehr),
darum kann man es auch an alles übergeben, welches TStrings "verlangt"

TString kann nicht alles, welches TStringList kann, darum kann man es auch nicht an etwas übergeben,
welches "mindestens" das verlangt, was auch eine TStringList kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 2. Jan 2010, 15:13
Dann ist ja wohl TStringlist der größere Eimer
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:07 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