2014-07-07 11 views
5

Während ich einen meiner Code durchführe, stecke ich auf einer Aussage fest, die wie folgt ist.Was bedeutet die Deklaration `Klasse von`?

TMyObjectClass = class of TMyObject;

Ich bin ein wenig verwirrt und fragen, was die Bedeutung dieser Aussage ist. Da TMyObjectClass keine Deklaration über der Aussage hat.

und TMyObject ist mit Erklärung wie folgt:

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

Also, meine Frage ist, was die Bedeutung der Aussage ist TMyObjectClass = class of TMyObject;

und Wie TMyObjectClass funktioniert?

Ich bin ein wenig neu in Delphi, also bitte helfen Sie mir, eine Idee über diese Art von Deklaration und da Workarounds zu bekommen.

+3

Sie können über dieses Thema lesen ("hier") (http://docwiki.embarcadero.com/RADStudio/XE/en/Class_References). – TLama

Antwort

14

Dies ist ein Class Reference.

Sie werden verwendet, um mit Meta-Klassen zu arbeiten. Das bekannteste Beispiel ist das Delphi-Streaming-Framework, das auf virtuelle Konstrukteuren Bindung Dies ermöglicht dynamische

TComponentClass = class of TComponent; 

verwendet. Der TComponent Konstruktor ist virtual. Das Streaming-Framework muss Klassen initialisieren, die von TComponent abgeleitet sind. Es tut so etwas wie folgt aus:

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

Jetzt, da TComponent.Createvirtual ist, wird dies in einer polymorphen Art und Weise gebunden. Wenn TComponentClassTButton ist, dann wird TButton.Create aufgerufen. Wenn TComponentClassTPanel ist, dann wird TPanel.Create aufgerufen. Und so weiter.

Das Wichtigste, was zu realisieren ist, ist, dass die Klasse, die konstruiert wird, nur zur Laufzeit bestimmt wird. Beachten Sie, dass vielen Sprachen diese Fähigkeit fehlt, vor allem C++.

+0

@jerry ja danke –

Verwandte Themen