Métaclasses

Les méta-classes constituent un niveau d'abstraction au dessus des classes, et permettent de manipuler des références de classes et non des références à des instances (objets).

Déclaration

Les méta-classes se déclarent via "class of":

type TCarClass = class of TCar

Utilisation

Au travers d'une méta-classe, il est possible d'instancier des objets ou de faire directement appel à leur méthodes et propriétés de classe.

type
   TCar = class
      ...
   end;

type TCarClass = class of TCar;

type
   TToyota = class (TCar)
      ...
   end;

type
   TPeugeot = class (TCar)
      ...
   end;

var marque : TCarClass;
var obj : TCar;

marque := TToyota;
obj := marque.Create; // sera équivalent à TToyota.Create

marque := TPeugeot;
obj := marque.Create; // sera équivalent à TPeugeot.Create

Polymorphisme

Les méthodes virtuelles de classes peuvent être utilisées sur une référence de classe, ce qui permet de mettre en oeuvre des services abstrait, sans avoir à créer d'instances.