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
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.