The TList<T> is independent of / t TList .
You cannot drop one on TForm other and expect reasonable results more than you could use TForm to TButton (for example).
In Delphi, tricks like this form are not marked, sometimes called hard-casting. That is, the compiler will simply trust that you know what you are doing and will just match, but if the type is invalid, the results will be unpredictable.
For conversions between types of reference objects (and / or links to an interface), you can use a verified listing using an operator like :
FList := tmpList as TList;
If the checked listing is invalid (for example, this one), then the compiler will throw an exception at runtime, warning you of an error.
Why does the compiler even allow unverified casts?
In some cases, uncontrolled castings can be useful and safely used in specific applications. But outside these specific conditions, uncontrolled passages at best trust luck or specific compiler behaviors or RTL characteristics that can be changed.
eg. A 32-bit trick of storing object references or other pointer values ββin an Integer variable. Such code may continue to work upon recompilation for the 64-bit version, but now only in case of luck and only in some cases, since only a subset of the possible 64-bit pointer values ββcan be safely stored in the 32-bit Integer.
If you have code that successfully compresses between TList and TList<T> , then it worked only luck, as a result of some specific compiler or RTL behavior at this time.
source share