AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Instanziierung von Interfaces

Ein Thema von Levitan · begonnen am 25. Nov 2017 · letzter Beitrag vom 26. Nov 2017
Antwort Antwort
Levitan

Registriert seit: 10. Nov 2017
6 Beiträge
 
#1

Instanziierung von Interfaces

  Alt 25. Nov 2017, 08:06
Hallo zusammen,

Ich würde gerne Ein Interface dynamisch instanziieren. Damit meine ich: Der zu instanzierende Klassentyp kommt als String aus einer eigenen Customizing Tabelle.

Folgende Variante ist mir geläufig:
Ein Case Block mit "1 : mo_Irgend_ein_Interface := TCL_Irgendeine_Implementierende_Klasse.Create" ist eine statische Geschichte die für
mich nicht zielführend ist, (wenn es sich irgendwie vermeiden lässt).
Warum?: Weil jedesmal wenn ich eine weitere implementierende Klasse anlege, muss ich den CASE Block erweitern.

Gibt es in Delphi (Version?) eine Möglichkeit diese Instanziierung über einen String zu bewerkstelligen?
Dies wäre eine viel bessere Möglichkeit. z.B:

VAR
lo_IFC : TIF_Irgend_Ein_Interface
lv_Klassen_Name : String;

lv_Klassen_Name := 'TCL_Implementierende_Klasse_A';
lo_IFC := ( lv_Klassen_Name ).Create // <- Hier ist kein Case Block notwendig. NUR, leider funktioniert dies nicht in Delphi.

Ich habe es auch schon mit TYPE OF versucht, aber keine Chance.

Was mache ich Falsch, bzw. geht es überhaupt und wenn ja, wie ?


Gruß
Levitan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Instanziierung von Interfaces

  Alt 25. Nov 2017, 09:44
Such doch hier im Forum mal nach "Class Factory", da solltest Du ein paar Ansätze finden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Instanziierung von Interfaces

  Alt 25. Nov 2017, 09:44
Ich würde gerne Ein Interface dynamisch instanziieren. Damit meine ich: Der zu instanzierende Klassentyp kommt als String aus einer eigenen Customizing Tabelle.
Eine Möglichkeit wäre, dass sich alle Klassen, die ein Interface implementieren, irgendwo regstrieren, so dass eine Factory-Methode sie anhand des Namens instantiieren kann. In der Regel geschieht diese Registrierung durch einen Aufruf wie

Delphi-Quellcode:

ClassFactoryXY.RegisterClass('NameOfClass', TNameOfClass);
In meinem Code erfolgt die Registrierung meist in der Initialization Section der Unit, in der die Klasse deklariert wird.

Um diese Registrierungen zu speichern könnte man z.B. ein Dictionary anlegen, mit dem Namen der Klasse als Key und einem Class Pointer als Value. Ich benutze noch ein älteres Delphi, das TDictionary noch nicht kennt, und habe deshalb TStringList verwendet.

Die Instantiierung erfolgt dann duch einen Aufruf der ClassFactory wie diesen:

Delphi-Quellcode:

MyIntVariable := ClassFactoryXY.CreateInstance('NameOfClass');
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Instanziierung von Interfaces

  Alt 25. Nov 2017, 09:52
Genau, ich habe auch mein Beispiel wiedergefunden: http://www.delphipraxis.net/1360719-post13.html. Das funktioniert in der Form aber erst ab Delphi 2010 (wegen Generics und der erweiterten RTTI), davor muss man ein paar andere Klimmzüge machen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Levitan

Registriert seit: 10. Nov 2017
6 Beiträge
 
#5

AW: Instanziierung von Interfaces

  Alt 25. Nov 2017, 09:58
Hallo zusammen,

ganz herzlichen Dank für eure Antworten.
Ich denke das hilft mir weiter.


Gruß
Levitan
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Instanziierung von Interfaces

  Alt 26. Nov 2017, 13:25
Hi!

Ich würde an ein Dictionary die GUID des Interface registrieren... Und die Classe oder die Create-Methode

Das kann auch eine TFunc sein, die das Interface zurück gibt.

Mavarik
  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:35 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