Problem ist, dass bei den Generics die Vererbung bissl "komisch" arbeitet und die Hierarchie nicht immer so aussieht, wie man denken könnte.
Aber ich hätte auch gedacht, dass es bei diesen 3 Varianten hätte gehen sollen, da du eigentlich auf den
gleichen selben Typ prüfst und der ja gleich sein müsste.
Wobei 1 und 3 das Selbe ist, von den Typen her, da sich nur der Bezeichner unterscheidet. (ob es A oder B heißt, macht keinen Unterschied)
[EDIT] Das TBase in
is ...<TXyz>
war doch das TXyz aus
TBaseObjectList<TXyz: class> = ...
und nicht das "einzelne"
TBase = class
?
Aber bei
TBaseObjectList<T: TBase> = class(...
ist diese Prüfung auch nicht nötig, da bereits der Compiler die Prüfung übernimmt und du somit einfach "blind" hart casten kannst, weil es nichts Anderes sein kann.