Zitat von
RSE:
Jetzt weiß ich wieder, was mich an diesen vorgefertigten Listen immer stört: Wenn ich mir ein Item zurückgeben lasse, dann ist das vom Typ TCollectionItem und nicht von meinem Typ TMyItem. Dadurch muss ich immer erst einen Typecast durchführen, bevor ich auf meine Eigenschaften zugreifen kann.
Delphi-Quellcode:
MyItemList.ItemClass(MyItemList.Items[2]).MyProperty := 'was'; // mit TCollection
MyItemList[2].MyProperty := 'was'; // eigene Lösung mit Items als default Property
Dem Nutzer meiner Komponente kann ich das wohl kaum abverlangen. Das heißt ich müsste die Collection komplett kapseln. Ist das wirklich so gedacht?
Klar ist das so gedacht. Schau dir halt mal an, wo die
VCL TCollection verwendet (z.B. TStatusPanels) - das ist schon machbar.
Zitat von
RSE:
Wenn ich meine von TCollection und TCollectionItem abgeleiteten Klassen so vergewaltige, dass der Rückgabetyp TMyItem statt TCollection ist (Konstruktor, Add, Items etc. mit neuen Versionen verdecken und diverse Aufrufe umbauen), dann wird wohl der mitgelieferte Editor auch nicht mehr funktionieren. Vielleicht ergeben sich sogar noch mehr und unlösbare Fehler daraus...
Mein Fazit: Der Weg über TCollection ist Mist.
Also: Überzeugt mich vom Gegenteil oder beantwortet meine ursprüngliche Frage.
Ich werd jetzt nicht ewig versuchen, dich zu deinem Glück zu zwingen.
Aber wenn ich Komponenten für Delphi schreibe, würde ich auch den Delphi-Weg dabei gehen. Wie gesagt - in den
VCL-Sourcen gibt's genug Beispiele.