Feedback

C# - Instanz per Reflection erstellen

Veröffentlicht von am 30.05.2014
(0 Bewertungen)
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 Namespaces
System
System.Collections.Generic
Namespace - Für die Testklassen

Testklassen
namespace 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

 

Logge dich ein, um hier zu kommentieren!