2013-04-05 13 views
5

System.TypInfo.TPropInfo ha due membri di funzione (almeno in D-XE3):privi di documenti I membri del TPropInfo

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

non riesco a trovare alcuna documentazione per loro o eventuali esempi del loro uso. A cosa servono e come possono essere utilizzati? (Spero che si qualifichi come una domanda.)

risposta

2

La funzione NameFld restituisce il nome di una proprietà come TTypeInfoFieldAccessor.

Questo vi permette di effettuare le seguenti operazioni:

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

I negozi TTypeInfoFieldAccessor il nome di una proprietà in un shortstring internamente.
Poiché il compilatore NextGen non supporta le sequenze brevi, viene utilizzato un tipo PByte.
(immagino l'autore non ha voluto lettiera la fonte con ifdefs e strappato i riferimenti PShortstring)

L'ingresso di Tail è un PBYTE che punta al campo di lunghezza del ShortString interna.

Ecco il codice sorgente per coda.

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; 

Perché shortstrings non sono zero finale, non si può fare un semplice "ciclo fino a quando il carattere null viene trovato" tipo di ciclo.
Quindi un ciclo dall'inizio alla coda può essere utilizzato per trasferire la sequenza di stringhe in una stringa normale.
Stranamente nel codice sorgente RTL effettivo il byte di lunghezza viene utilizzato ovunque anziché la funzione tail; quindi sembra un avanzo.
Avrebbe avuto più senso includere una funzione size e strappare lo tail.

Problemi correlati