インターフェイスの使用
オブジェクト モデルの使用:インデックス への移動
Delphi は、単一継承言語です。つまり、すべてのクラスは直上の上位クラスを 1 つだけ持ちます。とはいえ、複数の基底クラスからプロパティやメソッドを継承したクラスを新しく作成し、それを状況に応じて別々のクラスのように使用できるようにしたいときがあります。インターフェイスを使用すると、このような効果を得られます。
インターフェイスとは、抽象メソッド(実装を持たないメソッド)だけを持ち、機能が明確に定義されたクラスのようなものです。インターフェイス メソッドの定義には、パラメータの数と型、戻り値型、期待される動作などがあります。慣習的に、インターフェイスには、大文字 I を先頭に付けて、その動作に準じた名前が付けられます。たとえば IMalloc インターフェイスは、メモリの割り当て、解放、および管理を行うことになります。同様に IPersist インターフェイスは、下位クラスの汎用基底インターフェイスとして使用されることになりますが、それぞれの下位クラスは、記憶領域、ストリーム、またはファイルに対してオブジェクトの状態を読み込んだり保存するために、固有のメソッドのプロトタイプを定義します。
次にインターフェイスの構文を示します。
IMyObject = interface procedure MyProcedure; end;
次は、単純なインターフェイス宣言例です。
type IEdit = interface procedure Copy; procedure Cut; procedure Paste; function Undo: Boolean; end;
インターフェイスは絶対にインスタンス化できません。インターフェイスを使用するには、実装クラスから取得する必要があります。
インターフェイスを実装するには、上位クラスのリストでインターフェイスを宣言するクラスを定義し、そのクラスがそのインターフェイスのすべてのメソッドを実装することを示します。
TEditor = class(TInterfacedObject, IEdit) procedure Copy; procedure Cut; procedure Paste; function Undo: Boolean; end;
インターフェイスはメソッドの動作とシグネチャを定義しますが、実装は定義しません。クラスの実装がインターフェイスの定義に準拠している限り、インターフェイスは完全に多態です。つまり、そのインターフェイスへのアクセスや使用は、そのすべての実装で同じです。
関連トピック
- 階層全体にわたるインターフェイスの使用
- 手続きでのインターフェイスの使用
- IInterface の実装
- TInterfacedObject
- インターフェイスでの as 演算子の使用
- コードの再利用と委譲
- インターフェイス オブジェクトのメモリ管理