System.TypInfo.TPropInfo には 2 つの関数メンバーがあります (少なくとも D-XE3 では)。
function NameFld: TTypeInfoFieldAccessor; inline;
function Tail: PPropInfo; inline;
それらのドキュメントや使用例は見つかりません。それらは何のためにあり、どのように使用できますか? (それが 1 つの質問として認められることを願っています。)
System.TypInfo.TPropInfo には 2 つの関数メンバーがあります (少なくとも D-XE3 では)。
function NameFld: TTypeInfoFieldAccessor; inline;
function Tail: PPropInfo; inline;
それらのドキュメントや使用例は見つかりません。それらは何のためにあり、どのように使用できますか? (それが 1 つの質問として認められることを願っています。)
NameFld 関数は、プロパティの名前を として返しますTTypeInfoFieldAccessor
。
これにより、次のことが可能になります。
MyPropertyName:= MyPropInfo.NameFld.ToString;
if (PropInfoA.NameFld = PropInfoB.NameFld) then begin
writeln('property names are the same');
end;
TTypeInfoFieldAccessorは、プロパティの名前を短い文字列に内部的に保存します。
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