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)
我必须在这里遗漏一些非常明显的东西.我不想要类,只是一个简单的类型定义.
您正在尝试声明这样的变量:
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.但我不确定那会非常有用!
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |