Danke!
Ich finde es schon ein bisschen seltsam, dass sich B: TClassB nach TClassA typumwandeln lässt. Ich hatte gedacht, der Compiler verweigert die Typumwandlung "B as TClassA" mit "Inkompatible Typen". So reagiert er jedenfalls auf "StringList as TComponent". TClassA ist schließlich kein Vorfahr von TClassB. Allerdings ist TClassA inhaltsgleich mit der Vorfahrklasse TClassB = TGenericClassB<TObject> << TGenericClassA<TObject>, da TClassA = TGenericClassA<TObject> definiert wurde.
Die Laufzeitinformationen zu den Typen TClassA und bspw. einer dritten, konkreten, gleich definierten Klasse TClassC = class(TGenericClassA<TObject>) müssten sich doch zumindest im Klassennamen unterscheiden, und bilden damit unterschiedliche Klassen. Liege ich falsch? Ich weiß nicht, irgendwie scheint mir das gewöhnungsbedürftig.