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.