Schnittstellen in verschiedenen Klassen verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Schnittstellen verwenden


Durch den Einsatz von Schnittstellen kann die Art und Weise, in der eine Klasse verwendet wird, von ihrer Implementierung getrennt werden. Zwei Klassen können dieselbe Schnittstelle implementieren, auch wenn sie nicht Nachkommen derselben Basisklasse sind. Daher können Sie über die betreffende Schnittstellenreferenz bei beiden Klassen dieselben Methoden aufrufen, ohne den Typ der Klasse zu kennen. Dieser polymorphe Aufruf von Methoden für voneinander unabhängige Objekte ist möglich, weil diese Objekte dieselbe Schnittstelle implementieren. Als Beispiel dient die folgende Deklaration einer Schnittstelle

IPaint = interface
  procedure Paint;
end;

und zweier Klassen:

TSquare = class(TPolygonObject, IPaint)
  procedure Paint;
end;
TCircle = class(TCustomShape, IPaint)
  procedure Paint;
end;

Auch wenn die beiden Klassen unterschiedliche Vorfahren besitzen, sind sie doch mit der Variablen von IPaint zuweisungskompatibel:

var
  Painter: IPaint;
begin
  Painter := TSquare.Create;
  Painter.Paint;
  Painter := TCircle.Create;
  Painter.Paint;
end;

Sie können dies beispielsweise auch durch Ableitung von TCircle und TSquare von einer gemeinsamen Basisklasse (z.B. TFigure) erreichen, die eine virtuelle Methode namens Paint deklariert. TCircle und TSquare würden in diesem Fall die Methode Paint überschreiben. Im vorigen Beispiel könnte IPaint durch TFigure ersetzt werden. Beachten Sie aber die folgende Schnittstelle:

IRotate = interface
  procedure Rotate(Degrees: Integer);
end;

IRotate ist sinnvoll für das Rechteck, nicht aber für den Kreis. Die Klasse würde so aussehen:

TSquare = class(TRectangularObject, IPaint, IRotate)
  procedure Paint;
  procedure Rotate(Degrees: Integer);
end;
TCircle = class(TCustomShape, IPaint)
  procedure Paint;
end;

Anschließend können Sie eine Klasse namens TFilledCircle erstellen, welche die Schnittstelle IRotate implementiert, um für den Kreis eine Drehung des Füllmusters zu ermöglichen, ohne dass der Kreis selbst gedreht werden muss.

Hinweis: In diesen Beispielen wird unterstellt, dass die Basisklasse oder ein Vorfahr die Methoden von IInterface implementiert, der Basisschnittstelle, von der alle Schnittstellen abstammen. Weitere Informationen zu IInterface finden Sie unter IInterface implementieren und unter Speicherverwaltung für Schnittstellenobjekte.

Siehe auch