| 

.NET C# Java Javascript Exception

5
Hi,
ich stehe gerade "auf dem Schlauch" ...

Ich habe den Namen einer statischen Klasse als String und möchte nun auf eine Methode dieser statischen Klasse zugreifen. Wie komme ich da ran?
(Es sind unterschiedliche "Factory"-Klassen, die alle Instanzen von Objekten zurückliefern, die ein bestimmtes Interface implementieren.)

string myStaticClassName = "myABCFactory";
var myObject = ???myStaticClassName???.FactoryMethod();


*Update* Die Lösung sieht nun so aus:

Type factoryType = Type.GetType("myFullqualifiedClassName");
MethodInfo mi = factoryType.GetMethod("FactoryMethod", new Type[0]);
object myObject = mi.Invoke(null, null);


Weil die Methode "FactoryMethod" überladen ist, muss noch der "new Type[0]" eingefügt werden.
(siehe auch Stackoverflow.com: how to use reflection to invoke an overloaded method in net)

Danke!
News:
20.06.2011
Xantiva 2,3k 2 9
Xantiva 2,3k 2 9
3 Antworten
5
Hallo,

auch wenn es bestimmt vom Design her bessere Möglichkeiten gibt ist das mit Reflection möglich. Dabei aufpassen dass null als object übergeben wird, da es sich um einen statischen Typ handelt.

Type type = Type.GetType("myFullqualifiedClassName");
MethodInfo mi = type.GetMethod("FactoryMethod", BindingFlags.Static);
object myObject = mi.Invoke(null);

Habs nur so runtergetippt - vllt. lässt sich das so nicht kompilieren ;-)

Dennoch überdenke das Design.

mfG Gü
20.06.2011
gfoidl 9,4k 3 5
Danke, ich probiere es gleich aus.
Xantiva 20.06.2011
Hm, das liefer nur null zurück:
MethodInfo mi = factoryType.GetMethod("FactoryMethod", BindingFlags.Static);
Xantiva 20.06.2011
Ok, grundsätzlich geht es damit. Nur hatte ich vergessen zu erwähnen, dass es neben der .FactoryMethod ohne Parameter noch eine überladene Variante mit einem String Parameter gibt. Jetzt muss ich das vermutlich irgendwie mit den Bindings lösen?!
Xantiva 20.06.2011
Die Lösung übernehme ich in mein Eingangsposting.
Xantiva 20.06.2011
1
0
Du brauchst die Assembly und kannst dann per CreateInstance(myStaticClassName) eine Instanz der Klasse erstellen.
20.06.2011
HischLock 73 1 5
Vergiss meinene Beitrag, das geht glaube ich nicht mit statischen Klassen.
HischLock 20.06.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH