Klassenreferenztypen werden auch als Metaklassen bezeichnet. Die Definition erfolgt folgendermaßen:
class of Typ
Typ ist ein beliebiger Klassentyp. Der Bezeichner Typ gibt einen Wert des Typs class of Typ an. Ist Typ1 ein Vorfahr von Typ
2, dann ist class of Typ2 zuweisungskompatibel zu class of Typ1. Ein Beispiel:
type TClass = class of TObject;
var AnyObj: TClass;
Die Variable AnyObj kann eine beliebige Klassenreferenz aufnehmen (ein Klassenreferenztyp darf nicht direkt in einer Variablendeklaration oder Parameterliste definiert werden). Klassenreferenzvariablen kann auch der Wert nil zugewiesen werden.
Das folgende Beispiel (Konstruktor der Klasse TCollection in der
Unit Classes) zeigt, wie Klassenreferenztypen verwendet werden:
type TCollectionItemClass = class of TCollectionItem;
...
constructor Create(ItemClass: TCollectionItemClass);
Diese Deklaration besagt, daß beim Erstellen eines TCollection-Instanzobjekts der Name einer von TCollectionItem abgeleiteten Klasse an den Konstruktor übergeben werden muß.
Klassenreferenztypen sind hilfreich, wenn Sie eine Klassenmethode oder einen virtuellen Konstruktor in einer Klasse oder einem Objekt aufrufen wollen, dessen aktueller Typ zur Compilierzeit nicht bekannt ist.