In der Funktion mit dem Fehler ist Result
ein TObjectList<T>
, wobei T
eine Unterklasse von TItem
ist, aber der Compiler weiß nicht, um welche spezifische Klasse es sich handelt. Der Compiler muss es so kompilieren, dass es für beliebigen Wert von T
ausgeführt werden kann. Dies ist möglicherweise nicht mit dem Argumenttyp von LoadAll
kompatibel, für den ein TObjectList<TItem>
erforderlich ist, sodass der Compiler den Code zurückweist.
Angenommen, T
ist TItemDescendant
, und der Compiler ermöglicht das Kompilieren und Ausführen des fehlerhaften Codes. Wenn LoadAll
AList.Add(TItem.Create)
aufruft, behält AList
am Ende etwas, das kein TItemDescendant
ist, obwohl es ein TObjectList<TItemDescendant>
ist. Es enthält ein Objekt eines Typs, der sich von dem unterscheidet, was sein generischer Typparameter besagt.
Nur weil S
ein Untertyp von T
ist, bedeutet dies nicht, dass X<S>
ein Untertyp von X<T>
ist.
Tags und Links delphi generics tobjectlist