如何在不知道类型参数的情况下声明泛型类型的变量?

1 delphi generics type-erasure

如何定义泛型TList类型,以便我可以声明该类型的变量,然后为其分配任何特化TList<>

我想声明这个变量:

var
  MyList:THowToDeclareThisListType<T>;
Run Code Online (Sandbox Code Playgroud)

然后像这样实例化它:

MyList:=THowToDeclareThisListType<integer>.Create;
Run Code Online (Sandbox Code Playgroud)

要么

MyList:=THowToDeclareThisListType<double>.Create;
Run Code Online (Sandbox Code Playgroud)

我必须在这里遗漏一些非常明显的东西.我不想要类,只是一个简单的类型定义.

Dav*_*nan 5

您正在尝试声明这样的变量:

var
  List: TList<?>;
Run Code Online (Sandbox Code Playgroud)

这样List可以分配类型TList<Integer>TList<Double>或的对象TList<string>.

这是不可能的.使用泛型类型定义变量时,必须完全实例化该类型.

保存任何类型对象的变量的唯一方法TList<T>是将变量声明为具有公共基类TList<T>.并且公共基类不能是非实例化的泛型.对于TList<T>唯一可能的共同基类是TObject.

所以你可以写

var
  List: TObject;
Run Code Online (Sandbox Code Playgroud)

然后将任何对象分配给List.但我不确定那会非常有用!