Moin!
Welche Typen findet Type.GetType() eigentlich anhand des Namens??? Ein System.Int32 wird ja z.B. problemlos gefunden.
Wie finde ich aber eigene Klassen?
public class A{
public static void Main(){
System.Type t = System.Type.GetType("A");
// hier ist t immer noch null :-(
}
}
Gibt es einen Weg, wie ich mir den Typ 'A' erzeugen kann? Auf welche Bereiche beschränkt sich GetType() überhaupt?
Gruß
Jürgen
Danke!
Es funktioniert aber nur, wenn MeinNamespace.MeinKlassenname auch in der gleichen Datei wie der Aufruf GetType() vorhanden ist!
Wie bekomme ich aber den Typ aus einer anderen Klasse in einem anderen Assembly? Dabei weiss ich aber ausserdem nicht immer, in welchem Assembly diese Klasse steckt...
Gruß
Jürgen
dafür müsste das assembly ja systemweit registriert sein (wie die alten activeX-dlls).
..aber so arbeitet .net nicht.
schau dir mal die klasse "System.Activator" an - evtl. kannst du dein prob auf diesem wege lösen.
grtz
chief
Original von Chief Brodie
dafür müsste das assembly ja systemweit registriert sein (wie die alten activeX-dlls).
..aber so arbeitet .net nicht.
Und was ist mit dem GAC?
Wenn du weist welche assembly: Klassische Reflection Technik (gibt's haufenweise tuts dazu)
Versuch's doch mal mit :
DeinObject.GetType()
Gruß
Guggsu
Gruß
Guggsdu
Danke für Eure Hilfe!
Type.GetType() sucht also in den geladenen Assemblies und im Cache. Dann funzt es leider nicht, was ich vorhatte...
Ich werde jetzt auf dem Weg weitermachen, dass nicht nur der Klassenname, sondern auch der Assemblyname übergeben werden muss, um eine Instanz zu erzeugen.
Eine andere Möglichkeit wäre noch, alles Assemblies im Arbeitsverzeichnis zu laden und dann dort nach der Klasse zu suchen. Aber das ist mir jetzt zu aufwendig... 😉
Gruß
Jürgen
Würd ich auch so machen. Alle Assemblies zu laden wäre übrigens problematisch, da man geladene Assemblies nicht mehr entladen kann ...
Aber man könnte ja Assemblies in anderen AppDomains laden. Diese wären dann ja entladbar.
Mein jetziger Weg ist aber noch 1000mal einfacher und unkomplizierter. Alle Objekte, die ich erzeugen möchte, gab es vorher schon einmal. Also muss ich mir an dieser Stelle nur merken (Speicher, File, DB) aus welchem Assembly es stammte.
-Jürgen