2013-04-05 5 views
5

System.TypInfo.TPropInfo hat zwei Funktionselemente (zumindest in D-XE3):Undocumented Mitglieder TPropInfo

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

ich keine Unterlagen für sie oder irgendwelche Beispiele für deren Verwendung finden können. Wozu dienen sie und wie können sie verwendet werden? (Hoffen, dass dies eine Frage ist.)

Antwort

2

Die Funktion NameFld gibt den Namen einer Eigenschaft als TTypeInfoFieldAccessor zurück.

Auf diese Weise können Sie folgendes tun:

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

Die TTypeInfoFieldAccessor speichert den Namen einer Eigenschaft in einem shortstring intern.
Da der NextGen-Compiler keine Kurzschlüsse unterstützt, wird der Typ PByte verwendet.
(Ich denke, der Autor nicht die Quelle mit ifdefs Wurf wollte und die PShortstring Referenzen herausgerissen)

Der Eingang des Tail ist ein PByte zu Längenfeld des internen Short zeigt.

Hier ist der Quellcode für 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; 

Da shortstrings nicht Nullterminiert, man kann nicht eine einfache „Schleife, bis die Null char gefunden wird“ tun Art von Schleife.
Daher kann eine Schleife vom Anfang bis zum Ende verwendet werden, um die Kurzfolge in eine normale Kette zu übertragen.
Seltsamerweise wird im tatsächlichen RTL-Quellcode das Längenbyte überall anstelle der tail-Funktion verwendet; so sieht es aus wie ein Überbleibsel.
Es wäre sinnvoller gewesen, eine size Funktion einzuschließen und die tail herauszureißen.