Это потому, что ваш список не наследуется от аналогичного списка, универсальный тип которого наследует от базового класса.Они не могут заменять друг друга так же, как универсальные типы.Фактически, они не могут быть такими, не нарушая безопасность типов, от которой зависит многое в языке.
Чтобы понять почему, представьте, что MyList передается в процедуру, которая ожидает TMyObjectlist<TMyObject>
.Все хорошо, вплоть до того, как подпрограмма вызывает .Add и вставляет в список объект TMyIncompatibleObject, который также происходит от TMyObject.Тогда вы нарушили безопасность типов.
Есть способы обойти эту проблему, но они еще не были реализованы в Delphi.Надеюсь, команда Delphi скоро справится с этим, потому что это сделает Generics намного более полезным.