Laden...

System.Type.GetType("..")

Erstellt von GhoBu vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.593 Views
G
GhoBu Themenstarter:in
36 Beiträge seit 2004
vor 19 Jahren
System.Type.GetType("..")

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

N
4.644 Beiträge seit 2004
vor 19 Jahren
Type.GetType("DeinNamespace.DeinKlassenname")
G
GhoBu Themenstarter:in
36 Beiträge seit 2004
vor 19 Jahren

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

C
1.215 Beiträge seit 2004
vor 19 Jahren

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

N
4.644 Beiträge seit 2004
vor 19 Jahren

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?

C
980 Beiträge seit 2003
vor 19 Jahren

Wenn du weist welche assembly: Klassische Reflection Technik (gibt's haufenweise tuts dazu)

220 Beiträge seit 2004
vor 19 Jahren

Versuch's doch mal mit :

DeinObject.GetType()

Gruß
Guggsu

Gruß
Guggsdu

G
GhoBu Themenstarter:in
36 Beiträge seit 2004
vor 19 Jahren

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

C
980 Beiträge seit 2003
vor 19 Jahren

Würd ich auch so machen. Alle Assemblies zu laden wäre übrigens problematisch, da man geladene Assemblies nicht mehr entladen kann ...

G
GhoBu Themenstarter:in
36 Beiträge seit 2004
vor 19 Jahren

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