2011-10-20 66 views
5

Tôi thực sự đang cố gắng sử dụng Rtti để ngụ ý một phương pháp chung của người gọi. Nó sẽ làm việc như thế này:Làm thế nào để lấy tham chiếu kiểu lớp bằng tên của nó trong Delphi XE?

  • tôi sẽ cung cấp tên lớp, tên phương thức và biện luận
  • các Invoker sẽ làm công việc của mình bằng cách gọi phương thức quy định của lớp này

Vì vậy, tôi cần tham chiếu lớp để lấy thông tin Rtti của nó và tìm phương thức mà tôi muốn gọi.

Có cách nào để thực hiện điều đó mà không triển khai danh sách tham chiếu lớp của các lớp mà tôi muốn làm việc không?

+0

Bạn định lên kế hoạch giữ một phiên bản của lớp học như thế nào? –

+0

Tôi có thể khởi tạo một đối tượng cho dù tôi có tham chiếu lớp học – Haruki

Trả lời

8

Để lấy tham chiếu lớp bằng tên của mình, bạn phải sử dụng hàm TRttiContext.FindType chuyển Tên của lớp và truy xuất cá thể sử dụng thuộc tính AsInstance và sau đó bạn có thể gọi hàm tạo của lớp.

var 
    Instance : TRttiInstanceType; 
    ctx : TRttiContext; 
    mClass : TValue; 
begin 
    ctx := TRttiContext.Create; 
    Instance := ctx.FindType(ClassName).AsInstance; //ClassName is something like 'Classes.TStringList'; 
    mClass := Instance.GetMethod('Create').Invoke(Instance.MetaclassType,[]); 

    //do your stuff here 


end; 
+0

Nó hoạt động ở đây, cảm ơn rất nhiều cho câu trả lời của bạn! – Haruki

+0

Có cách nào để xem nếu tôi có bất kỳ thể hiện của lớp này đã được khởi tạo và nhận đối tượng này để sử dụng không? – Haruki

+2

Đây là một câu hỏi khác, nhưng sử dụng RTTI không thể thực hiện được. – RRUZ

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