2013-04-05 26 views
5

System.TypInfo.TPropInfo có hai thành viên chức năng (ít nhất là trong D-XE3):khống và thành viên của TPropInfo

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

tôi không thể tìm thấy bất kỳ tài liệu hướng dẫn cho họ hoặc bất kỳ ví dụ về việc sử dụng chúng. Chúng là gì và chúng có thể được sử dụng như thế nào? (Hy vọng rằng đủ điều kiện là một câu hỏi.)

Trả lời

2

Hàm NameFld trả về tên của thuộc tính là TTypeInfoFieldAccessor.

này cho phép bạn làm như sau:

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

Các cửa hàng TTypeInfoFieldAccessor tên của một tài sản trong một shortstring nội bộ.
Vì trình biên dịch NextGen không hỗ trợ shortstrings, nên sử dụng loại PByte.
(tôi đoán tác giả không muốn xả rác nguồn với ifdefs và tách ra các tài liệu tham khảo PShortstring)

Các đầu vào của Tail là một PByte trỏ đến lĩnh vực chiều dài của shortstring nội bộ.

Đây là mã nguồn cho đuôi.

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; 

Vì shortstrings không bị chấm dứt, bạn không thể thực hiện vòng lặp "loop for null char found" đơn giản.
Do đó một vòng lặp từ đầu đến đuôi có thể sử dụng để chuyển chuỗi ngắn thành chuỗi bình thường.
Kỳ lạ trong mã nguồn RTL thực tế, byte dài được sử dụng ở mọi nơi thay vì hàm tail; vì vậy nó trông giống như một còn sót lại.
Sẽ có ý nghĩa hơn khi bao gồm hàm size và tách ra tail.

Các vấn đề liên quan