AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Objekte die ein Interface impl in einer Liste speichern???
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte die ein Interface impl in einer Liste speichern???

Offene Frage von "winx"
Ein Thema von winx · begonnen am 10. Jun 2008 · letzter Beitrag vom 10. Jun 2008
Antwort Antwort
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#1

Objekte die ein Interface impl in einer Liste speichern???

  Alt 10. Jun 2008, 12:34
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'

wie kann ich in Delphi in einer Liste beliebige, IAction implementierente Objekte speichern?

Danke,
winx
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Objekte die ein Interface impl in einer Liste speichern?

  Alt 10. Jun 2008, 12:36
Funktioniert ein Cast?
Markus Kinzler
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#3

Re: Objekte die ein Interface impl in einer Liste speichern?

  Alt 10. Jun 2008, 13:03
fActions.Add(TObject(action));

Es funzt

Mann bin ich bescheuert, ans naheliegenste nicht gedacht

Danke!!!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Objekte die ein Interface impl in einer Liste speichern?

  Alt 10. Jun 2008, 13:03
Zitat von winx:
wie kann ich in Delphi in einer Liste beliebige, IAction implementierente Objekte speichern?
Mit TInterfaceList?

HTH,
Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Objekte die ein Interface impl in einer Liste speichern?

  Alt 10. Jun 2008, 13:23
Zitat von winx:
fActions.Add(TObject(action));
Bitte keine harten Casts! Du kommst über früher oder später in teufels Küchen (unerwartete Speicherfreigaben oder keine)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#6

Re: Objekte die ein Interface impl in einer Liste speichern?

  Alt 10. Jun 2008, 15:29
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
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Objekte die ein Interface impl in einer Liste speichern?

  Alt 10. Jun 2008, 15:41
Hallo,

wenn Du wirklich ein Interface an einen Eintrag hängen willst, bekommst Du den nur über einen weiteren Cast wieder zurück:
action := IAction(Pointer(lbActions.Items[i].LinkedObject)); 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.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Objekte die ein Interface impl in einer Liste speichern?

  Alt 10. Jun 2008, 20:49
nimm eine Helperobjekt welche das Interface speichert

Delphi-Quellcode:
type
  TInterfaceHolder = class(TObject)
    FInterface: IAction;
  end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz