2014-07-07 19 views
5

Mentre si passa attraverso uno dei miei codici, sono bloccato su un'istruzione che è la seguente.qual è il significato della dichiarazione di tipo `Class of`?

TMyObjectClass = class of TMyObject;

Sono un po 'confuso, e si chiede qual è il significato di questa affermazione. As TMyObjectClass non ha alcuna dichiarazione sopra la dichiarazione.

e TMyObject sta avendo dichiarazione come di seguito:

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

Così, la mia domanda è che cosa è il significato della dichiarazione TMyObjectClass = class of TMyObject;

e Come TMyObjectClass opere?

Sono un po 'nuovo a Delphi, quindi per favore aiutatemi a farvi un'idea su questo tipo di dichiarazione e ci sono soluzioni alternative.

+3

È possibile leggere su questo argomento ['here'] (http://docwiki.embarcadero.com/RADStudio/XE/en/Class_References). – TLama

risposta

14

Questo è un Class Reference.

Sono utilizzati per lavorare con le meta classi. L'esempio canonico è il framework di streaming Delphi che utilizza

TComponentClass = class of TComponent; 

Ciò consente l'associazione dinamica ai costruttori virtuali. Il costruttore TComponent è virtual. Il framework di streaming deve istanziare classi derivate da TComponent. Lo fa qualcosa di simile:

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

Ora, a causa TComponent.Create è virtual, questo è legato in modo polimorfico. Se TComponentClass è TButton, viene chiamato TButton.Create. Se TComponentClass è TPanel, viene chiamato TPanel.Create. E così via.

La cosa più importante da realizzare è che la classe che viene costruita è determinata solo in fase di esecuzione. Nota che molte lingue non hanno questa capacità, in particolare C++.

+0

@jerry sì grazie –