TInterfacedObject
Nach oben zu Schnittstellen verwenden
Wenn Sie eine Klasse definieren, die eine oder mehrere Schnittstellen unterstützt, dann bietet sich die Verwendung von TInterfacedObject als Basisklasse an, da diese Klasse die Methoden von IInterface implementiert. Die Klasse TInterfacedObject ist in der Unit System folgendermaßen deklariert:
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;
Das Ableiten eigener Schnittstellen von TInterfacedObject ist problemlos möglich. In der folgenden Beispieldeklaration ist TDerived als direkter Nachkomme von TInterfacedObject abgeleitet und implementiert die hypothetische Schnittstelle IPaint.
type TDerived = class(TInterfacedObject, IPaint) . . . end;
Da die Klasse TInterfacedObject die Methoden von IInterface implementiert, führt sie automatisch die Referenzzählung und die Speicherverwaltung für von ihr abgeleitete Objekte durch. Weitere Informationen finden Sie unter Speicherverwaltung für Schnittstellenobjekte. In diesem Thema wird auch beschrieben, wie Sie eigene Klassen erstellen, die Schnittstellen implementieren, aber nicht die Referenzzählung von TInterfacedObject nutzen.