TInterfacedObject
Remonter à Utilisation des interfaces
Lors de la définition d'une classe qui prend en charge une ou plusieurs interfaces, il est commode d'utiliser TInterfacedObject comme classe de base, car elle implémente les méthodes de IInterface. La classe TInterfacedObject est déclarée de la manière suivante dans l'unité System :
type TInterfacedObject = class(TObject, IInterface) protected FRefCount: Integer; function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public procedure AfterConstruction; override; procedure BeforeDestruction; override; class function NewInstance: TObject; override; property RefCount: Integer read FRefCount; end;
Dériver directement de TInterfacedObject est trivial. Dans l'exemple de déclaration suivant, TDerived est un descendant direct de TInterfacedObject qui implémente une interface hypothétique IPaint.
type TDerived = class(TInterfacedObject, IPaint) . . . end;
Comme TInterfacedObject implémente les méthodes de IInterface, elle gère automatiquement le comptage de références et la gestion mémoire pour les objets interfacés. Pour davantage d'informations, voir Gestion mémoire des objets interface, qui traite également de l'écriture de classes implémentant des interfaces sans utiliser le mécanisme de comptage de références inhérent à TInterfacedObject.