Diess Snippet zeigt wie man eine Instanz eines Typs mit Reflection erzeugt. Es werden auch 2 Möglichkeiten gezeigt um einen generischen Typ zu ermitteln.
Benötigte NamespacesSystem
System.Collections.Generic
Namespace - Für die Testklassen
Testklassennamespace Namespace
{
public class Class
{
public Class()
{
Console.WriteLine("Parameterloser Konstruktor wurde azufgerufen");
}
public class NestedClass
{
public NestedClass(string a, int b)
{
Console.WriteLine("Parameterisierter Konstruktor wurde azufgerufen");
}
}
}
}
//1. Type ermitteln:
// Möglichkeit 1: Erstellung des Types über einen Direktzugriff auf den Typ
var type1 = typeof(Class);
// Möglichkeit 2: Erstellung des Types über den Pfad (als String angegeben)
// Namespaces und Typen werden durch einen Punkt (.) abgetrennt
// Innere Typen werden durch ein Plus (+) abgetrennt
// Der Assemblyname wird durch ein Komma (,) abgetrennt angehängt. Wenn der Typ in der aufrufenden Assembly liegt, kann die Assembly weg gelassen werden
var type2 = Type.GetType("Namespace.Class+NestedClass");
//Generischen Typ erzeugen 1
var type3 = typeof(Dictionary<int, string>);
//Generischen Typ erzeugen 2
var type4 = typeof(Dictionary<,>).MakeGenericType(typeof(int), typeof(string));
//2. Instanz erstellen
// Erstellen über den Parameterlosen Konstruktor:
var instance1 = Activator.CreateInstance(type1);
// Erstellen über einen Konstruktor der Parameter benötigt:
var instance2 = Activator.CreateInstance(type2, "parameter 1", 2);
// Erstellen über den Parameterlosen Konstruktor mit angabe des Rückgabetyps (kein Cast erforderlich):
var instance3 = Activator.CreateInstance<Class>();
//Für generische Typen sieht der Aufruf genauso aus
Kommentare zum Snippet