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
會更有意義。