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

时间:2013-03-28 16:54:13

标签: delphi generics type-erasure

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

我想声明这个变量:

var
  MyList:THowToDeclareThisListType<T>;

然后像这样实例化它:

MyList:=THowToDeclareThisListType<integer>.Create;

MyList:=THowToDeclareThisListType<double>.Create;

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

1 个答案:

答案 0 :(得分:5)

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

var
  List: TList<?>;

可以为List分配TList<Integer>TList<Double>TList<string>类型的对象。

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

如果变量被声明为具有TList<T>的公共基类,则可以拥有包含TList<T>类型任何对象的变量的唯一方法。并且公共基类不能是非实例化的泛型。对于TList<T>,唯一可能的公共基类是TObject

所以你可以写

var
  List: TObject;

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