Den Operator as mit Interfaces verwenden
Nach oben zu Schnittstellen verwenden
Wenn Klassen Schnittstellen implementieren, können sie den Operator as für die dynamische Bindung an die Schnittstelle verwenden. Ein Beispiel:
procedure PaintObjects(P: TInterfacedObject) var X: IPaint; begin X := P as IPaint; { statements } end;
Die Variable P des Typs TInterfacedObject kann der Variablen X zugewiesen werden, bei der es sich um eine IPaint-Schnittstellenreferenz handelt. Die Zuweisung wird durch die dynamische Bindung ermöglicht. Für diese Zuweisung erzeugt der Compiler Code zum Aufruf der Methode QueryInterface der Schnittstelle IInterface von P. Der Compiler geht so vor, weil aus dem deklarierten Typ von P nicht hervorgeht, ob die Instanz von P tatsächlich IPaint unterstützt. Zur Laufzeit wird entweder P als IPaint-Referenz aufgelöst, oder es wird eine Exception ausgelöst. In beiden Fällen wird durch die Zuweisung von P an X kein Compiler-Fehler generiert. Es wird jedoch ein Compiler-Fehler generiert, wenn P einen Klassentyp darstellt, der IInterface nicht implementiert.
Wenn Sie den Operator as für die dynamische Bindung an eine Schnittstelle verwenden, sollten Sie die folgenden Anforderungen berücksichtigen:
- Explizite Deklaration von IInterface: Obwohl alle Schnittstellen von IInterface abgeleitet sind, reicht es für den Einsatz des Operators as nicht aus, wenn eine Klasse die Methoden von IInterface implementiert. Dies gilt auch, wenn zusätzlich die explizit deklarierten Schnittstellen implementiert werden. Die Klasse muss IInterface vielmehr explizit in der Vorfahrenliste deklarieren.
- Verwendung einer IID: Schnittstellen können einen Bezeichner verwenden, der auf einer GUID (Globally Unique Identifier = global eindeutiger Bezeichner) basiert. GUIDs zur Bezeichnung von Schnittstellen werden Schnittstellenbezeichner (Interface Identifiers = IIDs) genannt. Wenn Sie den Operator as mit einer Schnittstelle einsetzen, muss diese eine zugeordnete IID besitzen. Mit dem Editor-Tastenkürzel Strg+Umschalt+G können Sie im Quelltext eine neue GUID erstellen.