![]() |
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
Ok, nochmal zum Verständnis: Wenn ich eine Variable mit der Basisklasse deklariere, bleiben mir Möglichkeiten offen, die mit eine Nachfolgerklasse schon festgelegt sind. Soweit klar. Meine Fragestellung beinhaltet aber auch, dass ich von vornherein vorhabe, die Variable mit TStringList zu instanzieren. Ist das geschehen, (und das ist ja hier das Thema) kann ich die Kasse TString doch nicht mehr nutzen!? Oder meinst du vielleicht, dass man die Variable leert (TStringList.Free) und dann eine andere (Nachfolger-)Klasse instanziert? Bin ich jetzt auf dem richtigen Weg, oder liege ich jetzt ganz daneben? |
Re: Warum TStrings erstellen mit TStringList.Create?
Wie gesagt, wenn du Objekte von TStringList erzeugen/ablegen willst ist auch TStringList als Typ ok
|
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
Wenn die Klasse als TStrings deklariert ist, hast du aber über die Variable nur direkten Zugriff auf die Anteile der TStrings-Schnittstelle. Sortieren kann man dann also nicht mehr. Handhabe es einfach so: - Variablendeklarationen so hoch wie möglich, denn dann hast du direkten Zugriff auf alle Möglichkeiten der instantitierten Klasse > also TStringList - Parameterdeklarationen so klein wie möglich, dann hast du die größte Kompatibilität zu anderen Ableitungen > also TStrings |
Re: Warum TStrings erstellen mit TStringList.Create?
Wow! Danke für die Antworten! Bitte um Geduld, das muss ich jetzt erst verdauen und testen. Melde mich dann wieder.
Guido. Edit: Gemeint sind alle Antworten ab ![]() Edit 2: Hab tatsächlich noch welche übersehen, muss also heißen: Alle Antworten ab ![]() |
Re: Warum TStrings erstellen mit TStringList.Create?
Mann oh Mann, ganz schön viel Zeugs! Ich versuche das mal möglichst kurz zusammen zu fassen. (Wird wohl trozdem ein bisschen länger :-D )
Zitat:
Zitat:
Zitat:
Hier kristallisiert sich jetzt auch eine andere Formulierung der Ausgangsfrage herraus. Denn mit zunehmenden Informationen scheint es mir immer unsinniger, eine TString-Variable mit TStringList.Create zu instanzieren. In einem Beispiel von sirius verzweigt er zwar in einer Abfrage nach TStringlist.create,
Delphi-Quellcode:
aber wirklich Sinn macht es doch nicht, da nur die Eigenschaften und Methoden von TStrings verwendet werden können. Es kann an der obigen Stelle doch mit was-weiß-ich-was instanziert werden, es bleibt doch immer nur TStrings verfügbar. Oder sehe ich das falsch?
var x:TStrings;
begin if irgendetwas=irgendetwasanders then x:=TStringlist.create // <-- hier else x:=Memo1.lines; end; Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Puh, geschafft. Vielen Dank an alle für die Antworten! :thumb: Falls ich das Resümee (schreibt man wirklich so) falsch erstellt habe, freue ich mich über Berichtigung. Falls es richtig ist (könnte fast eine if-Abfrage formulieren *smile*) freue ich mich über Bestätigung. Guido. PS: Ich hoffe, ich hab da nicht allzuviele Fehler drin, es war jetzt doch ziemlich viel aufzuarbeiten. |
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
var
sl, sl2: TStrings; begin sl := TStrings.Create; sl2 := TStringList.Create; (sl2 as TStringList).Sort; //Funktioniert; (sl as TStringList).Sort; //Funktioniert nicht, da die Instanz die Methode nicht kennt |
Re: Warum TStrings erstellen mit TStringList.Create?
Zitat:
Damit will ich sagen, dass mir trotz der hier erklärten Möglichkeiten (die ich ja auch verstehe) nicht einleuchten will, warum man (gerade) bei TStringList-Instanzierung mit der Basisklasse deklarieren sollte. Ich sehe zwar die hier genannten Möglichkeiten, die sich dadurch ergeben, aber nicht die Notwendigkeit dieser Vorgehensweise. Anders ausgedrückt: Es macht soviel Sinn, wie den Mount Everest zu besteigen. Man kann das tun, ist vielleicht toll, muss man aber nicht. Weshalb ich von Fehler spreche ist, dass ich es einfach "richtiger" finde, eine Instanz von TStringList auch mit TStringList zu deklarieren. Spätestens nach all den Postings hier finde ich auch keinen Nachteil, der dadurch entstehen würde, und der nicht mit irgendeinem TypeCast zu beheben wäre. Zitat:
Zum Schluss sei noch erwähnt: Zitat:
Kann jemand mal in einer neueren Delphi-Version nachsehen, ob es dort auch 1:1 übernommen wurde? Es ist zu finden unter dem Thema "Eine neue Stringliste erstellen", Abschnit "Kurzlebige Stringlisten". Ansonsten: Vielen Dank für all die Postings! Guido. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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