インターフェイスでの as 演算子の使用
インターフェイスの使用 への移動
インターフェイスを実装しているクラスでは、そのインターフェイスでの動的バインディングに as 演算子を使用できます。次の例では、
procedure PaintObjects(P: TInterfacedObject) var X: IPaint; begin X := P as IPaint; { statements } end;
TInterfacedObject 型の変数 P を、IPaint インターフェイス参照である変数 X に代入できます。動的バインディングにより、この代入が可能になります。この代入のために、コンパイラは、P の IInterface インターフェイスの QueryInterface メソッドを呼び出すコードを生成します。これは、P のインスタンスが実際に IPaint インターフェイスをサポートしているかどうかを、P の宣言された型からコンパイルの時点で判断することができないためです。実行時には、P が IPaint 参照に解決されるか、例外が発生するかのどちらかになります。どちらの場合でも、P を X に代入してもコンパイル時にエラーは発生しませんが、P が IInterface を実装していないクラス型の場合には、コンパイル エラーが発生します。
as 演算子をインターフェイスでの動的バインディングに使用する場合は、次の要件に注意する必要があります。
- IInterface を明示的に宣言する: すべてのインターフェイスは IInterface から派生しますが、as 演算子を使用する場合には、クラスで IInterface のメソッドを実装するだけでは十分ではありません。これは、たとえクラスで明示的に宣言しているインターフェイスを実装していても、同じことが言えます。クラスでは、そのインターフェイス リストで IInterface を明示的に宣言する必要があります。
- IID を使用する: インターフェイスでは、GUID(グローバル一意識別子)に基づく識別子を使用できます。インターフェイスの識別に使用される GUID をインターフェイス識別子(IID)と呼びます。as 演算子をインターフェイスと共に使用する場合は、インターフェイスに IID が関連付けられている必要があります。ソース コードに新しい GUID を作成するには、エディタのショートカット キー Ctrl+Shift+G を使用できます。