Implements を使用した委譲

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

コードの再利用と委譲 への移動


多くのクラスでは、サブオブジェクトであるプロパティを持っています。また、インターフェイスをプロパティの型として使用することもできます。プロパティがインターフェイス型(またはインターフェイスのメソッドを実装するクラス型)の場合は、そのプロパティの宣言で 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.

関連項目