Einzelnen Beitrag anzeigen

Guido Eisenbeis

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

Re: Warum TStrings erstellen mit TStringList.Create?

  Alt 5. Jan 2010, 12:49
Zitat von mkinzler:
Zitat:
eine Deklaration mit TStrings falsch = Fehler in der Delphi-Hilfe.
Ich würde das nicht als Fehler sehen.
Nun ja, das ist dann eine Frage der Definition. Ich verstehe schon, was du meinst. Dennoch frage ich mich, warum das hier in der Hilfe gemacht wird. Mir ist außer TStringList kein anderer Fall bekannt, wo in der Hilfe mit einer Basisklasse deklariert, und einer Nachfahrenklasse instanziert wird. Ich lasse mich aber gerne eines Besseren belehren, wenn jemand ein anderes Beispiel in der Hilfe weiß, wo das vorkommt. Denn genauso könnte man, getreu der hier genannten Argumente, dieses Vorgehen bei vielen anderen Klassen anwenden. Das ist mir aber aus der Delphi-Hilfe bei keiner andren Klasse bekannt.

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 von mkinzler:
Zitat:
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?
Jein. das Objekt( die Instanz) ist schon vom entsprechenden Typ und kennt auch alle Attribute/Methoden/Properties.

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
Auch für diesen Hinweis vielen Dank! Hat mich allerdings auch verwirrt. Ich dachte: "Wo fängt das an, wo hört das auf?" Auch der alte Spruch von Toyota fiel mir ein: "Nichts ist un-möööööö-glich, To-yooo-taaa!" Denn irgendwie geht ja (fast) alles.


Zum Schluss sei noch erwähnt:
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
Ich halte das in einem gewissen Sinn für möglich. Ich habe in der Hilfe von Delphi 7 nachgesehen und dort steht 1:1 genau das gleiche Beispiel drin. Es beschleicht mich das Gefühl, das da mal irgendwer beim Erstellen der Hilfe vielleicht ungewollt mit TString deklariert und mir TStringList instanziert hat, und das wurde immer und immer wieder übernommen.

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.
  Mit Zitat antworten Zitat