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");
}
}
}
}
GFU-Schulungen  [Anzeige]

C# Grundlagen

Die Schulung vermittelt Ihnen die Grundlagen von C# in der Arbeit mit Datentypen sowie bei Klassenbibliotheken. Sie lernen, mit Variablen umzugehen und deren verschiedene Formen zu konvertieren. 

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

//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!