TInterfacedObject

提供: RAD Studio
移動先: 案内検索

インターフェイスの使用 への移動


TInterfacedObjectIInterface のメソッドを実装しているため、1 つまたは複数のインターフェイスをサポートするクラスを定義するときは、TInterfacedObject を基底クラスとして使用すると便利です。TInterfacedObject クラスは 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;

直接 TInterfacedObject からクラスを派生させるのは簡単です。次に示す宣言の例では、TDerivedTInterfacedObject の直接の下位クラスであり、仮想的な IPaint インターフェイスを実装しています。

type
  TDerived = class(TInterfacedObject, IPaint)
  .
  .
  .
  end;

TInterfacedObjectIInterface のメソッドを実装しているため、インターフェイス オブジェクトの参照カウントとメモリ管理を自動的に処理します。詳細については、「インターフェイス オブジェクトのメモリ管理」を参照してください。ここでは、インターフェイスを実装しながらも TInterfacedObject に固有の参照カウント メカニズムに従わない独自のクラスを記述することについても解説しています。

関連項目