TypeData中动态数组的不同元素类型条目有何作用?

时间:2011-12-02 21:45:28

标签: delphi delphi-xe rtti

包含不同数据类型的RTTI的TTypeData字段有三个不同的动态数组元素类型值:

elType: PPTypeInfo;       // nil if type does not require cleanup
elType2: PPTypeInfo;      // independent of cleanup
DynArrElType: PPTypeInfo; // actual element type, even if dynamic array

elType的目的很明确:它在RTL中由FinalizeArray使用,如果没有任何内容可以最终确定,则保留 nil 。但是我们还有另外两个元素elType2DynArrElType。有谁知道为什么有两个,两者之间有什么区别?

2 个答案:

答案 0 :(得分:2)

只能回答关于elType2的问题,因为这是我过去使用的唯一一个,该字段用于保存数组的元素类型。检查此样本

{$APPTYPE CONSOLE}

uses
  TypInfo,
  SysUtils;

type
 TDateArray = array of TDateTime;
Var
  p      : PPTypeInfo;
begin
  try
     p:=TypInfo.GetTypeData(TypeInfo(TDateArray)).elType2;
     Writeln(TypInfo.GetTypeName(p^));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

这将返回TDateTime,这是TDateArray类型元素的类型。

BTW,DynArrElType

在delphi的最新版本中替换了DynUnitName: ShortStringBase字段

答案 1 :(得分:0)

据我所知,RTL没有使用elType2DynArrElType来表示任何事情。编译器可能正在将这些值作为额外元数据发布,可能用于文档生成器等。