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
orTAggregatedObject
, which you can find in theComObj
andComServ
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 ofIUnknown
. When implementingIUnknown
in another class, you might want to copy the implementation of the_AddRef
,_Release
, andQueryInterface
methods fromTInterfacedObject
.
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.