System.TypInfo.TPropInfo 有两个函数成员(至少在 D-XE3 中):
function NameFld: TTypeInfoFieldAccessor; inline;
function Tail: PPropInfo; inline;
我找不到它们的任何文档或任何使用它们的示例。它们的用途是什么以及如何使用它们?(希望这是一个问题。)
System.TypInfo.TPropInfo 有两个函数成员(至少在 D-XE3 中):
function NameFld: TTypeInfoFieldAccessor; inline;
function Tail: PPropInfo; inline;
我找不到它们的任何文档或任何使用它们的示例。它们的用途是什么以及如何使用它们?(希望这是一个问题。)
NameFld 函数将属性的名称作为TTypeInfoFieldAccessor
.
这允许您执行以下操作:
MyPropertyName:= MyPropInfo.NameFld.ToString;
if (PropInfoA.NameFld = PropInfoB.NameFld) then begin
writeln('property names are the same');
end;
TTypeInfoFieldAccessor在内部将属性的名称存储在短字符串中。
因为 NextGen 编译器不支持短字符串,所以使用了一个PByte
类型。
(我猜作者不想用 ifdefs 乱扔源代码并撕掉 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;
因为短字符串不是以空字符结尾的,所以不能执行简单的“循环直到找到空字符”类型的循环。
因此,可以使用从头到尾的循环将短字符串转换为普通字符串。
奇怪的是,在实际的 RTL 源代码中,到处都使用长度字节而不是tail
函数;所以它看起来像一个剩菜。
包含一个size
函数并删除tail
.