Implements für die Delegation verwenden
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.