FPC kennt doch auch irgendwie Generics?
TList<TmySelectableItem>
und schon hat man eine Liste, mit automatischem Cast ... muß man selbst nichts machen und macht dadurch auch keine Fehler.
Und dann SoftCasts, anstatt HardCasts,
zu mindestens so lange du nicht weißt was wo wie richtig ist (kann man ja später aus Performancegründen wieder umdrehen).
Der Compiler meckert nur, wo es komplett inkompatibel wird, wenn man z.B. direkt TmySelectableItems zu TmySelectBox casten will.
Schon sagt dir zur Laufzeit das Programm auch, wenn wo Intern was falsch läuft. z.B. TmySelectableItems zu TmySelectBox casten, aber mit TObjekt oder Pointer als Zwischentypen.
Delphi-Quellcode:
// statt
TmySelectableItem(xxx.Items[i])
(xxx.Items[i] as TmySelectableItem)
// bzw.
(TObject(xxx.Items[i]) as TmySelectableItem) // wenn es ein Pointer ist und AS nicht direkt geht