Tôi cần có danh sách các loại biểu mẫu, nhưng chỉ cho các loại có nguồn gốc từ một biểu mẫu cơ sở nhất định.Làm thế nào để có được danh sách các lớp học bắt nguồn từ một lớp nhất định, với RTTI nâng cao?
tôi sử dụng Delphi năm 2010 và tăng cường RTTI để duyệt các loại
mã hiện tại của tôi là:
rc := TRTTIContext.Create;
rtyps := rc.GetTypes;
for rtyp in rtyps do
begin
if not(rtyp.IsInstance) then Continue;
// Now I need to check if rtyp.AsInstance.MetaclassType is derived from TMyBaseForm
end;
Tôi không muốn instanciate một đối tượng và sử dụng 'là' nhà điều hành, vì nó sẽ không thực hiện kịp thời.
Là một workaround hiện tại, tôi kiểm tra nếu một phương pháp, được giới thiệu trong TMyBaseForm, đã được tìm thấy trong bối cảnh RTTI:
if (rtyp.GetMethod('MyMethod') = nil) then Continue;
nhưng đây không phải là một giải pháp trong sạch, vì nó có thể dẫn đến vấn đề nếu một phương pháp với cùng tên đã được giới thiệu trong một nhánh khác.
Vì vậy, câu hỏi của tôi: là có cách thông thường để phát hiện xem loại lớp có bắt nguồn từ loại lớp khác không?
Cảm ơn,
Tôi không biết cách triển khai bằng RTTI, nhưng có chức năng [ClassParent] (http://docwiki.embarcadero.com/VCL/en/System.TObject.ClassParent). Nó trả về kiểu tổ tiên ngay lập tức của một lớp. Hoặc nếu bạn cần tìm hiểu xem một loại hoặc đối tượng lớp cụ thể có phải là một thể hiện của một lớp hoặc một trong các lớp con của nó hay không, hãy sử dụng [InheritsFrom] (http://docwiki.embarcadero.com/VCL/en/System.TObject.InheritsFrom) chức năng. – TLama