Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi for-in mit TList Nachfahr (https://www.delphipraxis.net/50720-mit-tlist-nachfahr.html)

tigerman33 30. Jul 2005 09:55


for-in mit TList Nachfahr
 
Hi,

warum funktioniert die neue for-in Anweisung nicht mit Nachfahren von TList?

Hab die default Eigenschaft Items überschrieben und als Rückgabetyp ne eigene Klasse eingesetzt. Der Compiler meldet jedes mal nen Fehler weil for-in aus irgendeinem Grund nen pointer zurückgibt! :x

Irgendwie wird da wohl immer noch die Items property vom Vorfahr (also TList) aufgerufen, aber wie kann ich denn das umgehen?!?

Delphi Rulez!

Robert_G 30. Jul 2005 10:01

Re: for-in mit TList Nachfahr
 
Du musst einen eigenen Enumerator schreiben und deinen TList-Nachfahren mit einem GetEnumerator bestücken, dass diesen Enumerator zurückgibt.
Der Enum muss das hier besitzen um als solcher erkannt zu werden:
Delphi-Quellcode:
public
  function getCurrent : DeineKlasse;
  property Current : DeineKlasse read getCurrent;
  function MoveNext : Boolean;
BTW: Schicke von mir bitte auch ein Dankeschön an denjenigen, der das verhunzt hat. Keine Ahnung warum D2005 so blöde ist, dass es nicht einfach einen Typecast auf den ITem typen propbiert, mit dem du iterieren willst... :wall:

OT: Klappt das eigentlich in D.Net? :gruebel:

tigerman33 30. Jul 2005 10:11

Re: for-in mit TList Nachfahr
 
Danke werd ich mal ausprobieren

GuenterS 30. Jul 2005 13:25

Re: for-in mit TList Nachfahr
 
Sorry für OT:

Aber kann mir jemand sagen worin denn eigentlich der Vorteil für For In besteht, wenn ich dazu nun doch wieder erst Enumeratoren, etc. schreiben muss? Dann könnt ich ja gleich ne gewöhnliche for Schleife verwenden.

DGL-luke 30. Jul 2005 13:48

Re: for-in mit TList Nachfahr
 
dann sieht der code schöner aus *g* :mrgreen:

es wird zumindest sehr viel klarer, wenn man nicht immer überall [i] dranhängen hat. im übrigen steigt da dann auch die codevervollständigung öfters aus.

Robert_G 30. Jul 2005 13:52

Re: for-in mit TList Nachfahr
 
Zitat:

Zitat von GuenterS
Aber kann mir jemand sagen worin denn eigentlich der Vorteil für For In besteht

Der code, der deine Container verwendet ist wesentlich lesbarer, außerdem ist es zum Beispiel für nicht-array-basierte Container enorm vortielhaft, da man dort oftmals keine wirkliche Indexierung hat.
Der Enum würde sich von Knoten zu knoten hangeln ohne das du in deinem Code mit den Knoten hantieren müsstest. ;)
Zitat:

Zitat von GuenterS
, wenn ich dazu nun doch wieder erst Enumeratoren, etc. schreiben muss? Dann könnt ich ja gleich ne gewöhnliche for Schleife verwenden.

Tja, genau das ist der Punkt, den ich einfach nicht kapiere.
In .Net-Sprachen wird ein "foreach" bzw. "for in" versuchen Enum.Current auf den Item typen zu boxen. In D2005 nicht, wodurch jeder Nachfahre eines generisch gehaltenen Containers (wie TList) alles neu implementieren muss. :wall:
Da for in eindeutig durch .Net inspiriert wurde, sollte man eigentlich erwarten können, dass man eine halbwegs konsequente "Kopie" davon bekommt...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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