2014-07-07 32 views
5

Trong khi đi qua một trong các mã của tôi, tôi bị mắc kẹt trên một tuyên bố đó là như dưới đây.ý nghĩa của khai báo kiểu `Lớp` là gì?

TMyObjectClass = class of TMyObject;

Tôi là một chút bối rối, và tự hỏi ý nghĩa của câu này là gì. Vì TMyObjectClass không có tuyên bố nào bên trên tuyên bố.

TMyObject là có tuyên bố như sau:

TMyObject = class(TObject) private //some private member declaration Public // some public variables end;

Vì vậy, câu hỏi của tôi là ý nghĩa của báo cáo kết quả TMyObjectClass = class of TMyObject;

và như thế nào TMyObjectClass công trình là bao nhiêu?

Tôi là một chút mới với Delphi, vì vậy hãy giúp tôi để có được một số ý tưởng về các loại tuyên bố và có cách giải quyết.

+3

Bạn có thể đọc về chủ đề này ['here'] (http://docwiki.embarcadero.com/RADStudio/XE/en/Class_References). – TLama

Trả lời

14

Đây là Class Reference.

Chúng được sử dụng để làm việc với các lớp meta. Ví dụ kinh điển là khung công tác phát trực tuyến Delphi sử dụng

TComponentClass = class of TComponent; 

Điều này cho phép liên kết động với các nhà thầu ảo. Nhà xây dựng TComponentvirtual. Khung trực tuyến cần khởi tạo các lớp bắt nguồn từ TComponent. Nó như vậy một cái gì đó như thế này:

var 
    ComponentClass: TComponentClass; 
    Component: TComponent; 
.... 
ComponentClass := GetComponentClassSomehowDoesntMatterHow; 
Component := ComponentClass.Create(Owner); 

Bây giờ, vì TComponent.Createvirtual, điều này được ràng buộc trong một thời trang đa hình. Nếu TComponentClassTButton thì TButton.Create được gọi. Nếu TComponentClassTPanel thì TPanel.Create được gọi. Và cứ thế.

Điều quan trọng nhất để nhận ra là lớp được xây dựng chỉ được xác định khi chạy. Lưu ý rằng nhiều ngôn ngữ thiếu khả năng này, đáng chú ý nhất là C++.

+0

@jerry yes cảm ơn –