![]() |
Interface zu Object?
Hallo,
Habe ein Problem mit Interfaces. Wie kann ich wenn ich ein Interface habe (ITab) es wieder ins urspüngliche Object (TEditTab) casten? Bekomme immer eine Fehlermeldung bei dem versuch. cya |
Re: Interface zu Object?
das geht nicht, soweit ich weiß. widerspricht jedenfalls der theorie eines interfaces.
vielleicht mit dirty tricks, etwa TEditTab(@MyInterface) oder so. Aber keine Ahnung ob das geht... Glaubs eher nicht |
Re: Interface zu Object?
Hallo DSeven!
Zitat:
Delphi-Quellcode:
Das Interface dient nur als Schnittstelle. Die Implementation erfolgt in einer Klasse, die das Interface einbindet. Siehe Quelltext. Damit hast Du auch eine Instanzvariable für das Objekt. Wozu da das Type-Casting?
unit TabIntf;
Interface uses ...benötigte Units type ITab = Interface(IUnknown) ... Interface-Methoden end; type TEditTab = class(irgendein passender Vorfahre, ITab) ... Interface Methoden -> Siehe ITab end; var EditTab: TEditTab; //Nun kannst Du ganz normal mit dem Objekt arbeiten, wie mit jedem //anderen Delphi Objekt. implementation //...Interface Methoden in der Klasse implementiert procedure TEditTab.Methode1; begin //Hier folgt die korrekte Implementation end; function TEditTab.Methode2: Rückgabetyp; begin //Hier folgt die korrekte Implementation end; end. Delphifan2004 |
Re: Interface zu Object?
Du kennst ja den Aufbau meines Programms nicht.
also ich habe keine keinen zugriff auf die Instanz da es ja mehrere Inszanzen gibt und diese sind eben in einer liste. Und aus der liste holl ich mir dann immer das Interface. Es ist schon klar das wenn ich nur ein Object hätte ich eben immer darauf zugreifen kann. Aber ich erstelle immer eine temporäre instanz diese wird in die liste eingetragen und die lokale variable wird dann ungültig. cya |
Re: Interface zu Object?
Hallo,
So würde es funktionieren, auch wenns nicht unbedingt schönes Design ist:
Delphi-Quellcode:
Um die forward-Deklaration von TEditTab zu vermeiden, kannst du auch bei GetObject einen Vorfahren zurückgeben.
type
TEditTab = class; ITab = Interface(IUnknown) function GetObject: TEditTab; end; TEditTab = class(irgendein passender Vorfahre, ITab) function GetObject: TEditTab; end; procedure TEditTab.Methode1; begin result := self; end; grüße, daniel |
Re: Interface zu Object?
Als lektüre zu einem verwandten thema, kann ich diesen thread empfehlen:
![]() |
Re: Interface zu Object?
Zitat:
cya |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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