AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TList 10.1 Berlin vs 10.3 Rio

Ein Thema von Int3g3r · begonnen am 18. Aug 2020 · letzter Beitrag vom 18. Aug 2020
Antwort Antwort
Seite 2 von 2     12
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.741 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#11

AW: TList 10.1 Berlin vs 10.3 Rio

  Alt 18. Aug 2020, 14:50
Wieso keine TObjektList oder gar eine generische TList<TObject> (oder TComponent/TMyIrgendwas/...) ?

Und ja, da hier überall VISIBLE vorkommt, ist es eigentlich nötig sich den gemeinsamen Vorfahren rauszusuchen und dann das nur einmal zu machen.
Liest du eigentlich noch die anderen Beiträge oder versuchst du auf Teufel komm raus auf 40.000 Beiträge zu kommen?

Da Visible aber in der Basis protected ist, und man hier weiß, dass ALLEs ein Visible (das Selbe) hat, kann man hier auch blind in einen Typen casten, wo es public ist ... siehe UliBru.
Das ist sachlich falsch. Die Eigenschaft TControl.Visible ist public.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.272 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: TList 10.1 Berlin vs 10.3 Rio

  Alt 18. Aug 2020, 15:15
Einiges fehlte noch und den Rest zusammenfassend mit aufgeführt.

Ich möchte ja das Objekt an der Adresse "ele" casten und nicht die Adresse selbst.
Du hast reinzu auch direkt TObject-Nachfahren nach Pointer (implizit) gecastet,
also muß es rückzu genauso sein, also Pointer nach TObjekt aka TObject(ele) .

Was bietet mir eine TObjectList im gegensatz zu einer TList ?
Weil es bereits einen passenderen Typen besitzt und man nicht erst böse casten muß?
Objekte rein, Objekte raus und das alles inklusive einer funktionierenden Typprüfung.

Bei Pointer mußt du ja harte Casts benutzen, womit die Typ-Prüfung des Compilers umgangen wird.

Da Einzige, was der Compiler prüfen kann, ist dass sie zumindestens die gleiche Größe haben, aber ob in ele wiklich "Objekte" drin ist, kann nicht geprüft werden.
Falls das nicht stimmt, kann der Code extrem schöne Fehler produzieren, welches nicht passieren würde, hätte man die Typprüfung des Compilers auf seiner Seite.

Mit TList<TControl> sogar noch sicherer, da man hier gleich weiß, dass in der Liste nur Objekte sein können, welche die Visible-API enthalten.
(gut, es kann sein, dass hier Visible nicht verwendet wird, aber dennoch lässt es sich auffrufen und macht dann einfach nichts ... aber es knallt wenigstens nicht)


Implizit:
TObjekt nach Pointer geht, da ein Objektzeiger (Variable oder Parameter) "zufällig" genauso groß wie ein Pointer ist, weil er "intern" einen Zeiger enthält, drum besitzt Delphi hier einen impliziten Cast (weil sowas oft von Entwicklern gemacht wird),
aber andersrum geht es nicht, da ein Pointer nicht immer ein Objekt-Zeiger sein muß und es sich auch nicht 100% sicher prüfen lässt, ob es so ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (18. Aug 2020 um 15:21 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 08:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf