Với RTTI mở rộng mới trong Delphi 2010, một ứng dụng Delphi (tại thời gian chạy) có xây dựng một danh sách tất cả các lớp thực hiện một giao diện cụ thể không?Liệt kê tất cả các lớp Delphi thực hiện một giao diện cụ thể?
8
A
Trả lời
20
Về mặt kỹ thuật, miễn là giao diện có GUID và các lớp bạn quan tâm nằm trong phần giao diện của các đơn vị.
Đơn vị RTTI không (chưa) có API để mô tả tất cả các giao diện mà một lớp thực hiện, nhưng dữ liệu nằm trong thông tin loại.
Các GUID cho một kiểu giao diện có thể được nhận từ biểu thức này:
GetTypeData(TypeInfo(ITheInterface))^.Guid
hay:
ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID
Lớp của các loại ví dụ sau đó có thể được kiểm tra bằng TClass.GetInterfaceEntry(IID)
- nếu nó trả về không -nil, lớp thực hiện giao diện.
Tất cả các lớp được khai báo trong phần giao diện của các đơn vị có thể được truy xuất qua TRttiContext.GetTypes
.
Viết lặp lại thực tế và mã trích xuất được để lại dưới dạng bài tập cho người đọc.