![]() |
AW: Interfaces - Multiple Inheritance
Zitat:
|
AW: Interfaces - Multiple Inheritance
Zitat:
Zitat:
|
AW: Interfaces - Multiple Inheritance
Sollte 'GetInterface' das Problem nicht lösen?
Dessenungeachtet frage ich mich, was 'Supports' für einen Sinn macht, wenn man damit nicht herausfinden kann, ob eine Instanz ein bestimmtes Interface implementiert. Oder einfach ausgedrückt: Wozu dient 'Supports'? Was es macht, weiß ich mittlerweile, aber wann benötigt man genau diese Funktionalität ("Ist IMyInterface in der Deklaration der Klasse TMyClass enthalten"). |
AW: Interfaces - Multiple Inheritance
Zitat:
a) Supports mehrfach überladen ist, so dass man nicht nur prüfen kann, ob eine Klasse ein Interface implementiert, sondern auch ein Interface auf ein anderes "gecastet" werden kann. b) Supports nix anderes macht, als letztlich GetInterface bzw GetInterfaceEntry aufzurufen, welches in diesem Fall keinen Eintrag für ein durch Interface Vererbung implizit unterstütztes Interface zurückliefert (wie ich schon in meinem Post von 2010 erwähnte). ;) P.S. Hab sogar gerade gefunden, warum das so ist: ![]() |
AW: Interfaces - Multiple Inheritance
Zitat:
IReadWrite = interface(IRead, IWrite) geht nicht. Daher kann leider nur IReadWrite = interface(IRead) oder IReadWrite = interface(IWrite) machen. Hat man jetzt ein IReadWrite und braucht sowohl IRead als auch IWrite, muss man zur Laufzeit einen der Casts über Supports() machen. Für COM-Interfaces braucht man ausserdem so ein QueryInterface() um aus einem fremden Pointer ein Interface zu machen. Als Sprachfeature intern ist die Verwendung von Supports ansonsten aber eher schlechter Stil (so in etwa wie wenn man Klassen und Methoden nicht normal benutzt, sondern alles zur Laufzeit über RTTI und irgendwelche Strings zusammenwurstet). |
AW: Interfaces - Multiple Inheritance
Zitat:
Zitat:
@panino: Ich bekomme niemals heraus, ob meine Klasse/Interface ein Interface implementiert, das nicht direkt in der Klassendeklaration angegeben ist. Das ist blöd. Es bleibt (für mich) dabei: 'Supports' ist nicht wirklich zu gebrauchen und wer diesbezüglich richtig programmieren will, muss zu .NET wechseln. Ich arbeite gerade damit und schüttle über die Restriktionen, die einem hier zwangsweise begegnen, nur den Kopf. |
AW: Interfaces - Multiple Inheritance
Zitat:
Zitat:
|
AW: Interfaces - Multiple Inheritance
Zitat:
Delphi-Quellcode:
true.
Supports
Bezieht sich halt auf meinen Beispielcode im Beitrag #5 weiter oben. TClass2 deklariert nur IChild bei den unterstützen Interfaces und deshalb kann man IFather nicht über Supports abrufen. Will man das, muss man es so deklarieren wie bei TClass1. |
AW: Interfaces - Multiple Inheritance
Zitat:
Ist das in XE6 immer noch so? Eine Mehrfachvererbung von Interfaces wäre wirklich sehr übersichtlich. Dass Supports die Vererbungen nicht nachvollziehen kann und in den Klassen daher die einzelnen Interfaces angegeben werden müssen finde ich weniger schlimm. Aber ein Interface von mehreren anderen abzuleiten wäre schon sehr hilfreich. |
AW: Interfaces - Multiple Inheritance
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz