2013-04-05 22 views
5

System.TypInfo.TPropInfo (en az D-XE3 olarak) iki fonksiyonu üyeleri vardır. Ne için kullanıyorlar ve nasıl kullanılabilirler? (Bu bir soru olarak kabul edilir.)Undocumented üye

cevap

2

NameFld işlevi, bir özelliğin adını TTypeInfoFieldAccessor olarak döndürür.

Bu aşağıdakileri yapmanızı sağlar: içten bir shortstring bir özelliğinin

MyPropertyName:= MyPropInfo.NameFld.ToString; 
if (PropInfoA.NameFld = PropInfoB.NameFld) then begin 
    writeln('property names are the same'); 
end; 

TTypeInfoFieldAccessor saklar ad.
NextGen derleyici kısa dizeleri desteklemediğinden, PByte tipi kullanılır.

Tail giriş

iç ShortString uzunluğu alanına işaret eden bir PByte (Ben yazar çöp için ifdefs ile kaynağını istiyor ve PShortstring başvuruları dışarı çıkarmış yoktu sanırım).

İşte kuyruk için kaynak kodu. shortstrings sonlandırılır boş değerle Çünkü döngünün tür "null karakteri bulunana kadar döngü"

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; 

, basit yapamaz. Bu nedenle, başlangıçtan kuyruğa bir döngü, kısa ipliği normal bir dizgeye aktarmak için kullanılabilir.
Gerçek RTL kaynak kodunda garip bir şekilde, uzunluk baytı tail işlevi yerine her yerde kullanılır; Yani artık bir kalıntı gibi görünüyor.
size işlevini dahil etmek ve tail'u sökmek daha mantıklı olurdu.