2013-04-05 55 views
5

System.TypInfo.TPropInfo有两个函数成员(至少在d-XE3):无证成员

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

我找不到他们或任何文件及其使用的任何例子。他们有什么用途以及如何使用它们? (希望有资格作为一个问题。)

回答

2

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会更有意义。