gpt4 book ai didi

delphi - TPropInfo 的无证成员

转载 作者:行者123 更新时间:2023-12-03 15:13:35 29 4
gpt4 key购买 nike

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 将属性名称存储在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;

因为短字符串不是以 null 结尾的,所以您不能执行简单的“循环直到找到 null 字符”类型的循环。
因此可以采用从头到尾的循环将短字符串转换为普通字符串。
奇怪的是,在实际的 RTL 源代码中,到处都使用长度字节而不是 tail 函数;所以它看起来像是剩下的。
包含 size 函数并去掉 tail 会更有意义。

关于delphi - TPropInfo 的无证成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15832975/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com