Implements für die Delegation verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Wiederverwendung von Quelltext und Delegation


Viele Klassen besitzen Eigenschaften, die untergeordnete Objekte darstellen. Sie können auch Schnittstellen als Eigenschaftstyp verwenden. Wird einer Eigenschaft der Typ interface zugewiesen (oder der Typ einer Klasse, in der die Methoden einer Schnittstelle implementiert werden), können Sie mit dem Schlüsselwort implements angeben, dass die Methoden dieser Schnittstelle an die Objekt- oder Schnittstellenreferenz delegiert werden, die den Eigenschaftswert repräsentiert. Der Delegat muss lediglich die Implementierung der Methoden zur Verfügung stellen. Die Schnittstelle muss hier nicht deklariert werden. Die Klasse mit der Eigenschaft muss in der Vorfahrenliste die Schnittstelle aufführen.

Standardmäßig führt die Verwendung des Schlüsselwortes implements zur Delegation aller Schnittstellenmethoden. Sie können aber Klauseln zur Methodenauflösung verwenden oder Methoden in der Klasse deklarieren, in der einige Schnittstellenmethoden implementiert werden, um einzelne Methoden zu überschreiben.

Das folgende Beispiel verwendet das Schlüsselwort implements zur Bereitstellung eines Farbadapter-Objekts, mit dem ein RGB-Farbwert (8 Bit) in eine Color-Referenz konvertiert wird:

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.

Siehe auch