5
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
。
这可以让你做到以下几点:在内部一个shortstring属性的
MyPropertyName:= MyPropInfo.NameFld.ToString;
if (PropInfoA.NameFld = PropInfoB.NameFld) then begin
writeln('property names are the same');
end;
的TTypeInfoFieldAccessor商店名称。
由于NextGen编译器不支持短弦,因此使用PByte
类型。
(我猜测作者不愿与垃圾的的ifdef源和拆出来PShortstring引用)
的Tail
输入是指向内部ShortString短的长度字段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;
因为shortstrings不是空终止,你不能“直到空字符被发现循环”的循环方式做一个简单的。
因此,可以使用从开始到尾部的循环将短弦转换为正常字符串。
奇怪的是,在实际的RTL源代码中,长度字节被用在所有地方而不是tail
函数;所以它看起来像一个剩余的。
包含一个size
函数和翻转tail
会更有意义。