![]() |
Re: Zirkuläre Unit Reference
Zitat:
Defakto ist der Zeiger auf das Interface ein Zeiger mit festen Offset relativ zum Zeiger auf die implementierende Instance der Klasse. Nachzulesen in Unit TypInfo.pas. Implementiert eine Klasse in Delphi sogar mehere Schnittstellen unterschiedlichen Types so unterscheiden sich sogar all diese Zeiger dieser Interfaces !! Beispiel
Delphi-Quellcode:
Ergo: die Frage ist nicht "warum unzulässig" sondern "überhaupt möhglich ?", und nein ist es nicht und erzeugt nur AVs und sonst nichts. Du versuchst nämlich damit nur aus einem Auto die Farbe Grün zu machen ohne irgendwelche Überprüfungen ;)type IInterface1 = interface; IInterface2 = interface; TMyImpl = class(TInterfacedObject, IInterface1, IInterface2) var MyImpl: TMyImpl; MyInt1: IInterface1; MyInt2: IInterface2; begin MyImpl := TMyImpl.Create; MyInt1 := MyImpl as IInterface1; MyInt2 := MyImpl as IInterface2; if (Pointer(MyImpl) = Pointer(MyInt1)) then // ist FALSE if (Pointer(MyImpl) = Pointer(MyInt2)) then // ist FALSE if (Pointer(MyInt1) = Pointer(MyInt2)) then // ist FALSE // ergo: IInterface1(MyImpl).XYZ; // ist FALSCH IInterface2(MyImpl).XYZ; // ist FALSCH TMyImpl(MyInt1).XYZ; // ist FALSCH TMyImpl(MyInt2).XYZ; // ist FALSCH (MyImpl as IInterface1).XYZ; // ist RICHTIG, wenn IInterface1 eine GUID hätte, hat (MyImpl as IInterface2).XYZ; // ist RICHTIG, wenn IInterface2 eine GUID hätte, hat (MyInt1 as TMyImpl).XYZ; // ist FALSCH, da ein Interface keinen spzifischen Typ eines Implementor kennt, siehe Abstraktion oben (MyInt2 as TMyImpl).XYZ; // ist FALSCH, .... end; Gruß Hagen |
Re: Zirkuläre Unit Reference
Erst mal vielen Dank für deine ausführlichen Antworten. Habe wieder echt was gelernt.
Zitat:
Die Interfacelösung habe ich verworfen. Die Lösung über TObject habe ich ausprobiert und sie funktioniert sehr gut. :hello: Die 3 Klassen-Lösung muss ich mal Komplett durchdenken, ich bin mir noch nicht sicher ob ich mit so mein Problem lösen kann. |
Re: Zirkuläre Unit Reference
Zitat:
Der Aufwand über abstrakte Vorfahrklassen ist nicht unerheblich, das muß man fairerweise sagen, und eben auch öfters nicht immer sauber umsetzbar. Auch da können dann Typcasts vorkommen. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 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