Name

TInterfacedObject Type

Syntax

type
  TInterfacedObject = class(TObject, IUnknown)
  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;

Description

The TInterfacedObject class implements the IUnknown interface with the reference counting semantics that Delphi and COM expect. It also implements QueryInterface to call GetInterface. In other words, TInterfacedObject provides useful implementations of IUnknown’s methods, so you can and should use TInterfacedObject as a base class for any class that must implement one or more interfaces.

Tips and Tricks

  • If you are using COM, you probably want to use one of the classes derived from TInterfacedObject or TAggregatedObject, which you can find in the ComObj and ComServ units.

  • If you are not using COM, TInterfacedClass provides the minimum functionality you need to take full advantage of Delphi’s interfaces.

  • You don’t have to use TInterfacedObject. Any class can implement the methods of IUnknown. When implementing IUnknown in another class, you might want to copy the implementation of the _AddRef, _Release, and QueryInterface methods from TInterfacedObject.

Example

type // Interface for accessing an object IObject = interface ['{618977EA-1ADA-11D3-B1A8-00105AA9C2AD}'] ...

Get Delphi in a Nutshell now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.