【发布时间】:2018-10-01 16:42:11
【问题描述】:
对于需要泛型类型“族”的一段代码,我尝试使用TypeInfo 来检索所需信息。
class function GetTypeKind<T>:TTypeKind;
对于大多数类型,我可以弄清楚这一点。但是匿名方法类型的行为出乎意料。
我有一个匿名方法类型定义为:
TMethodProc = reference to procedure;
我尝试获取类型信息:
MyKind := GetTypeKind<TMethodProc>;
class function GetTypeKind<T>:TTypeKind;
var
TI: PTypeInfo;
begin
TI := TypeInfo(T);
...
end;
我知道匿名方法背后有一些编译器的魔力。但我得到以下结果:
TI.TypeData.IntfParent == IInterface
TI.TypeData.IntfFlags == [(out of bounds)6]
标志有一个意外的值,TIntfFlag 有三个值,所以 6 是意外的。 GUID 也不是 guid。它有一组相同的 8 个字节的重复集,大部分为 00。例如 (0, 225, 48, 180, 0, 0, 0, 0, 0, 225, 48, 180, 0, 0, 0, 0)
匿名方法是否从TypeInfo 中排除,或者通过一些调整是否有用。
另外,(奇怪的)6 是一个未记录的功能,还是可以有任何价值?
【问题讨论】:
标签: delphi anonymous-methods delphi-10.2-tokyo typeinfo