Implements を使用した委譲
コードの再利用と委譲 への移動
多くのクラスでは、サブオブジェクトであるプロパティを持っています。また、インターフェイスをプロパティの型として使用することもできます。プロパティがインターフェイス型(またはインターフェイスのメソッドを実装するクラス型)の場合は、そのプロパティの宣言で implements
キーワードを使用すると、そのキーワードの直後に記述したインターフェイス(またはクラス)のメソッドを、プロパティの値となっているインターフェイス参照(またはクラス オブジェクト)に委譲することを指定できます。デリゲートでは、それらのメソッドを実装するだけでよく、インターフェイスのサポートを宣言する必要はありません。そのプロパティが宣言されているクラスでは、問題のインターフェイスが継承元リストに含まれている必要があります。
デフォルトでは、implements
キーワードを使用すると、インターフェイスのすべてのメソッドが委譲されます。ただし、メソッド解決句を使用するか、インターフェイス メソッドの一部を実装するメソッドをクラスに宣言すると、このデフォルト動作をオーバーライドできます。
次の例では、8 ビット RGB 色の値を Color 参照に変換するカラー アダプタ オブジェクトの設計で implements
キーワードを使用しています。
unit cadapt; interface type IRGB8bit = interface ['{1d76360a-f4f5-11d1-87d4-00c04fb17199}'] function Red: Byte; function Green: Byte; function Blue: Byte; end; IColorRef = interface ['{1d76360b-f4f5-11d1-87d4-00c04fb17199}'] function Color: Integer; end; { TRGB8ColorRefAdapter map an IRGB8bit to an IColorRef } TRGB8ColorRefAdapter = class(TInterfacedObject, IRGB8bit, IColorRef) private FRGB8bit: IRGB8bit; FPalRelative: Boolean; public constructor Create(rgb: IRGB8bit); property RGB8Intf: IRGB8bit read FRGB8bit implements IRGB8bit; property PalRelative: Boolean read FPalRelative write FPalRelative; function Color: Integer; end; implementation constructor TRGB8ColorRefAdapter.Create(rgb: IRGB8bit); begin FRGB8bit := rgb; end; function TRGB8ColorRefAdapter.Color: Integer; begin if FPalRelative then Result := PaletteRGB(RGB8Intf.Red, RGB8Intf.Green, RGB8Intf.Blue) else Result := RGB(RGB8Intf.Red, RGB8Intf.Green, RGB8Intf.Blue); end; end.