System.TInterfacedObject
Delphi
TInterfacedObject = class(TObject, IInterface)
C++
class PASCALIMPLEMENTATION TInterfacedObject : public TObject
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
class | public | System.pas systobj.h |
System | System |
説明
TInterfacedObject は、基本 IInterface 実装を必要とするシンプルなクラスの基底クラスとなります。
TInterfacedObject は、インターフェイスをサポートする Delphi クラスのための、スレッドセーフな基底クラスです。TInterfacedObject は、Delphi および C++ コード双方において、子孫クラスが便利に使用できる、基本的な参照カウント機能を提供します。
メモ: Delphi では、TInterfacedObject 型として宣言された変数は動的バインディングされます。つまり、子孫クラスのインスタンスは、その変数に対して、実行時に割り当てられることが可能になります。これは、TInterfacedObject が QueryInterface を実装しているためで、QueryInterface は、インスタンス化されたオブジェクトが要求されているインターフェイスをサポートしているかどうか判断するために、実行時に呼び出されます。サポートしている場合、その子孫オブジェクトは変数に対して正常に割り当てられます。QueryInterface によるフォローがないと、このような割り当てはコンパイル時のエラーを起こします。
Delphi では、TInterfacedObject の子孫は、クラス ファクトリもしくは CLSID を持っていません。このため、コンストラクタを呼び出す以外にインスタンス化されることはありません。
TInterfacedObject は、IUnknown や IInterface の C++ 版のメソッドを実装していません。Delphi で記述された TInterfacedObject の子孫のための C++ ラッパを使用している場合には、問題ありません。しかし、TInterfacedObject の C++ の子孫を作成している場合には、IUnknown の独自の実装を提供する必要が出てきます。この具体的な方法については、「IUnknown をサポートするクラスを作成する」(C++ 製品でのみ提供)を参照してください。