![]() |
Objekte die ein Interface impl in einer Liste speichern???
Hallo,
ich habe mehrere Klassen, die alle das IAction Interface implementieren. Nun erzeugt mir eine Factory immer die richtige Klasse und gibt mir das IAction Objekt zurück function build(...): IAction; Nun möchte ich diese in einer Liste abspreichern, bekomme aber immer den Fehler: [DCC Error] Actiongroup.pas(54): E2010 Incompatible types: 'TObject' and 'IAction' :wall: wie kann ich in Delphi in einer Liste beliebige, IAction implementierente Objekte speichern? Danke, winx |
Re: Objekte die ein Interface impl in einer Liste speichern?
Funktioniert ein Cast?
|
Re: Objekte die ein Interface impl in einer Liste speichern?
fActions.Add(TObject(action));
Es funzt :dp: Mann bin ich bescheuert, ans naheliegenste nicht gedacht :duck: Danke!!! |
Re: Objekte die ein Interface impl in einer Liste speichern?
Zitat:
HTH, Uli. |
Re: Objekte die ein Interface impl in einer Liste speichern?
Zitat:
|
Re: Objekte die ein Interface impl in einer Liste speichern?
habs mit der Interfaced List gemacht.
Aber wie kann ich nun diese IAction Objekte in eine Listbox einfügen (das klappt schon) und wieder rausbekommen??? Einfügen funktioniert: lbActions.Items.AddObject(action.ToString(),TObjec t(action)); Aber wenn ich Sie wieder rausholen möchte, gehts nicht: action := IAction(lbActions.Items[i].LinkedObject); //[DCC Error] ActionCreationForm.pas(128): E2010 Incompatible types: 'IAction' and 'TObject' wie läuft denn das mit Klassen, die ein Interface implementieren... ??? danke |
Re: Objekte die ein Interface impl in einer Liste speichern?
Hallo,
wenn Du wirklich ein Interface an einen Eintrag hängen willst, bekommst Du den nur über einen weiteren Cast wieder zurück:
Delphi-Quellcode:
Du solltest bei solchen Schweinereien aber beachten, dass Du damit die Referenzzählung aushebelst (bzw. eine Weak-Referenz verwendest). Das heist also, dass Du das Interface mit einer solchen Speicherung nicht vor dem Zerstören retten kannst.
action := IAction(Pointer(lbActions.Items[i].LinkedObject));
Gruß xaromz |
Re: Objekte die ein Interface impl in einer Liste speichern?
nimm eine Helperobjekt welche das Interface speichert
Delphi-Quellcode:
type
TInterfaceHolder = class(TObject) FInterface: IAction; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 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