System.TypInfo.TPropInfo有两个函数成员(至少在D-XE3中):
function NameFld: TTypeInfoFieldAccessor; inline;
function Tail: PPropInfo; inline;
我找不到任何关于它们的文档或任何使用它们的示例。它们是什么,它们如何使用? (希望有资格作为一个问题。)
答案 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
会更有意义。