Autor Beitrag
CASS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Di 12.06.07 09:20 
Hallo Leute,

ich suche eine Möglichkeit, eine Klasse zur Laufzeit zu bestimmen und dann zu erstellen. Soll dann so laufen das ich im Programme einen String habe, aufgrund dessen möchte ich dann die Klasse mit dem Namen des Strings erstellen. Hat jemand ne Idee wie sowas funktionieren könnte?

Grüße Cass
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 12.06.07 09:51 
Hallo!

Du musst zuerst einmal wissen, in welchem Assembly diese Klasse liegt. Der Einfachheit halber gehen wir davon aus, dass Deine Anwendung nur aus einer Assembly besteht.
ausblenden C#-Quelltext
1:
Assembly theAsm = Assembly.GetCallingAssembly();					

Es gibt noch andere Methoden für andere Situationen, einfach mal in der Hilfe stöbern

Dann musst Du Dir den Typ der Klasse besorgen. Wenn Du den Namen der Klasse hast, geht das so:
ausblenden C#-Quelltext
1:
Type myClassType = theAsm.GetType(myClassName);					

Schau Dir aber mal die Überladungen von GetType() an, um ein paar andere Möglichkeiten zu sehen, wie man den Type bekommen kann.

Jetzt noch eine Instanz erzeugen:
ausblenden C#-Quelltext
1:
IMyInterface myInstance = (IMyInterface )Activator.CreateInstance(myClassType);					


Ich bin dabei davon ausgegangen, dass alle Klassen, die hierfür in Frage kommen, ein gemeinsames Interface implementieren und man das Object, welches der Activator zurückgibt, darein casten kann. Dann wird die Benutzung der erzeugten Instanz viel einfacher. Ansonsten musst Du über Reflection jeweils Methoden und Eigenschaften ermitteln.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
CASS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Di 12.06.07 23:29 
Danke Christian,

nach dem hinzufügen der nötigen using direktive (System.Reflection) hat alles wunderbar funktioniert.

Danke und viele Grüße!
Cass