Typy odwołań klasowych


Typ odwołania klasowego, zwany czasem metaklasą, posiada postać:

class of type

gdzie type jest jakimkolwiek identyfikatorem klasowym. Jeśli type1 jest przodkiem typu type2, to class of type2 jest kompatybilne z class of type1. Zatem zapis:

type TClass = class of TObject;
var AnyObj: TClass;

deklaruje zmienną AnyObj, która może zawierać odwołanie do jakiejkolwiek klasy. (Definicja typu odwołania klasowego nie może występować wprost w deklaracji zmiennych lub w deklaracjach list parametrów.) Można przypisać wartość nil do zmiennej dowolnego typu odwołania klasowego.

Użycie typów odwołań klasowych pokazano poniżej, na przykładzie deklaracji konstruktora dla klasy TCollection (z modułu Classes biblioteki VCL).

type TCollectionItemClass = class of TCollectionItem;
  ...
constructor Create(ItemClass: TCollectionItemClass);

Ta deklaracja mówi, że aby wykreować obiekt klasy TCollection, trzeba przekazać do konstruktora nazwę klasy potomnej od TCollectionItem.

Typy odwołań klasowych są użyteczne do wywoływania metod klasowych lub wirtualnych konstruktorów dla klas lub obiektów, których aktualny typ jest nieznany w czasie kompilacji.

Konstruktory i odwołania do klas