TPropInfo的无证成员

时间:2013-04-05 11:37:52

标签: delphi delphi-xe3

System.TypInfo.TPropInfo有两个函数成员(至少在D-XE3中):

function NameFld: TTypeInfoFieldAccessor; inline;
function Tail: PPropInfo; inline;

我找不到任何关于它们的文档或任何使用它们的示例。它们是什么,它们如何使用? (希望有资格作为一个问题。)

1 个答案:

答案 0 :(得分:2)

NameFld函数将属性的名称作为TTypeInfoFieldAccessor返回。

这允许您执行以下操作:

MyPropertyName:= MyPropInfo.NameFld.ToString;
if (PropInfoA.NameFld = PropInfoB.NameFld) then begin 
  writeln('property names are the same');
end;

TTypeInfoFieldAccessor在内部存储shortstring内的属性名称 由于NextGen编译器不支持短串,因此使用PByte类型 (我想作者不想用ifdef乱丢源并删掉PShortstring引用)

Tail的输入是指向内部短串的长度字段的PByte。

这是tail的源代码。

function TTypeInfoFieldAccessor.Tail: PByte;
begin
  Result:= 
    FData    //Start of the shortstring 
    + FData^ + //Length of the stringData
    + 1; //Add one for the length byte itself
end;

因为shorttrings不是以null结尾,所以你不能做一个简单的循环,直到找到null char"循环。
因此,可以使用从开始到尾部的循环将短弦转换为普通字符串 在实际的RTL源代码中奇怪的是,长度字节在任何地方都使用而不是tail函数;所以它看起来像一个剩余的 包含size函数并删除tail会更有意义。