Schnittstellen verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Das Delegationsmodell verwenden - Index

Delphi ist eine Sprache, die keine Mehrfachvererbung zulässt. Das heißt, dass jede Klasse nur einen direkten Vorfahr hat. Gelegentlich ist es jedoch wünschenswert, dass eine neue Klasse Eigenschaften und Methoden von mehreren Basisklassen erbt, da sie dann vielfältiger einsetzbar ist. Mit Interfaces (Schnittstellen) können Sie einen ähnlichen Effekt erzielen.

Ein Interface (Schnittstelle) ähnelt einer Klasse, die nur abstrakte Methoden (Methoden ohne Implementierung) und eine genaue Definition ihrer Funktionalität enthält. Definitionen von Interface-Methoden enthalten Anzahl und Typ der Parameter, den Rückgabetyp und das erwartete Verhalten. Per Konvention werden Interfaces entsprechend ihres Verhaltens benannt; ihr Name beginnt mit einem großen I. Ein IMalloc-Interface würde beispielsweise Arbeitsspeicher zuweisen, freigeben und verwalten. Ein Interface namens IPersist könnte dagegen das Basis-Interface für Nachkommen bilden, die ihrerseits spezifische Methodenprototypen zum Laden und Speichern des Status von Objekten im Speicher, in Streams oder in Dateien definieren.

Für die Deklaration eines Interface gilt die folgende Syntax:

IMyObject = interface 
  procedure MyProcedure; 
end;

Ein einfaches Beispiel für eine Interface-Deklaration könnte etwa so aussehen:

type 
IEdit = interface 
  procedure Copy; 
  procedure Cut; 
  procedure Paste; 
  function Undo: Boolean; 
end;

Interfaces können nicht instantiiert werden. Der Einsatz eines Interface setzt also dessen Ableitung aus einer implementierenden Klasse voraus.

Zur Implementierung eines Interface definieren Sie eine Klasse, in deren Vorfahrenliste das Interface deklariert wird. Dadurch wird angezeigt, dass alle Methoden dieses Interface implementiert werden:

TEditor = class(TInterfacedObject, IEdit) 
  procedure Copy; 
  procedure Cut; 
  procedure Paste; 
  function Undo: Boolean; 
end;

Interfaces definieren das Verhalten und die Signaturen der enthaltenen Methoden, nicht jedoch deren Implementierungen. Wenn die Implementierung der Klasse der Interface-Definition entspricht, ist das Interface vollständig polymorph: Zugriff und Verwendung des Interface sind also für alle Implementierungen dieses Interface identisch.

Topics

Siehe auch