![]() |
Mehrfachvererbung: Interfaces, Objekte
Hallo DP
Ich bin noch in der Überlegungsphase, mir ein Pluginsystem zu schreiben, in dem ich über Plugin-DLLs so gut wie alles freigeben will. Um das erstmal zu testen, wollte ich mir eine Beispielanwendung schreiben, was dies mit einem MainMenu realisiert. Nun habe ich aber die Frage, wie ich diese Sachen zusammen bekomme:
Delphi-Quellcode:
TInterfacedObject würde ich gerne einbringen, da dort die automatische Referenzzählung vorgenommen wird.
IMainMenu = Interface(IInterface)
['{A01384F7-E3EA-49E5-B030-AED042FFBAB9}'] end; TIMainMenu = class(TInterfacedObject, TMainMenu, IMainMenu) end; Da Mehrfachvererbung in Delphi nicht möglich ist, funktioniert das natürlich nicht. Mein Ziel ist dabei, den DLLs zur Manipulation des MainMenus lediglich ein Interface zu übergeben, was benötigte Methoden bereitstellt. Mir vorgeschlagen wurde auch eine andere Möglichkeit:
Delphi-Quellcode:
Jedoch kann ich mit der 2. Variante nichts anfangen.
TIMainMenuWrapper = class(TInterfacedObject, IMainMenu)
end; TIMainMenu = class(TMainMenu) private FInterface : TIMainMenuWrapper; public constructor Create(AOwner : TComponent; AInterface : TIMainMenuWrapper = nil); reintroduce; virtual; end; Wie kann ich nun ersteres realisieren? |
Re: Mehrfachvererbung: Interfaces, Objekte
Gar nicht.
Das einzige was Du machen kannst ist z.B. direkt vin TInterfacedObject abzuleiten, ein TMainMenu als privaten Member zu implementieren und alle Aufrufe an IMainMenu an die TMainMenu instanz innerhalb Deines Objektes weiterzuleiten. |
Re: Mehrfachvererbung: Interfaces, Objekte
Zitat:
Delphi-Quellcode:
Sieht so aus, als ob man jede Komponente auch als Interface ansprechen kann. Die Referenzzählung in TComponent ist aber mit einigen if's gestaltet, die ich mir noch nicht näher angeschaut habe.
TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)
|
Re: Mehrfachvererbung: Interfaces, Objekte
Zitat:
|
Re: Mehrfachvererbung: Interfaces, Objekte
Zitat:
über welches dann alles bezüglich des Interfaces läuft. :gruebel: [add] Im Notfall die in TInterfacedObject eingeführten Dinge kopieren und direkt einbauen, oder halt 'ne eigene Version. Aber ich denke es würde übr ein zusätzliches InterfaceObjekt wohl am Besten sein, welches dann die Komponente anspricht. Wenn dein Programm aber das TMainMenu erstellt, verwaltet und freigibt und die anderen da nichts ändern, dann könntest du auch eventuell die Referenzzählung weglassen? :gruebel: |
Re: Mehrfachvererbung: Interfaces, Objekte
Zitat:
Aber an der Stelle ist das eine Überlegung, an die ich gar nicht dachte. Und auch wohl das Beste. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 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