![]() |
Warum TStrings erstellen mit TStringList.Create?
Auszug aus der Turbo-Delphi-Hilfe, Thema "Eine neue Stringliste erstellen":
Delphi-Quellcode:
So Leute, heut bin ich wieder am Grübeln. :gruebel: 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:
procedure TForm1.Button1Click(Sender: TObject);
var TempList: TStrings; { Liste deklarieren } begin TempList := TStringList.Create; { Listenobjekt erzeugen } try { Stringliste verwenden } ...
Code:
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? :spin2:
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. ... Guido. Edit: Mir ist bekannt, dass TStrings die Basisklasse, und TStringList davon abgeleitet ist. :smile2: |
Re: Warum TStrings erstellen mit TStringList.Create?
TStrings ist die abstrakte Basisklasse von TStringList
Du kannst den Typ natürlich auch alsn TStringList deklariere |
Re: Warum TStrings erstellen mit TStringList.Create?
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. |
Re: Warum TStrings erstellen mit TStringList.Create?
Ich meine neulich mal etwas bzgl. (Abwärts-)Kompatibilitätsgründen (der Delphi-IDEs) gelesen zu haben, finde es aber leider nicht mehr :gruebel:
|
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
Zitat:
Zitat:
Zitat:
Guido. |
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
wenn du z.B. diese Prozedur erstellst,
Delphi-Quellcode:
dann kannst du ihr alle Nachfahren von Strings übergeben.
procedure MyProc(List: TStrings);
also z.B. TStringList oder TMemoStrings (die interne virtuelle Stringliste des Memos, mit Umleitung zur Memokomponente von Windows) Wenn man jetzt sowas macht,
Delphi-Quellcode:
dann kann man dieser Funktionen nur noch eine TStringList und deren Nachfahren übergeben,
procedure MyProc(List: TStringList);
aber z.B. kein Memo.Lines mehr. Zitat:
|
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
Das hab ich auch gerade getestet. Das eine (TStrings übergeben, wenn TStringList verlangt wird) wird verweigert, während das umgekehrte funktioniert. Zitat:
|
Re: Warum TStrings erstellen mit TStringList.Create?
Ok, bleibt immer noch die Ausgangs-Frage: Warum eine Variable als TStrings deklarieren, wenn mit TStringList instanziert wird?
|
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
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. |
Re: Warum TStrings erstellen mit TStringList.Create?
Dann ist ja wohl TStringlist der größere Eimer :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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