wake-up-neo.net

Erstellen Sie eine Objektinstanz einer Klasse, deren Name in der Stringvariablen enthalten ist

Ich weiß nicht, ob das, was ich frage, verfügbar ist oder nicht, aber ich möchte nur wissen, ob es existiert und wie es funktioniert. Also hier ist meine Frage:

Ich habe 2-3 eigene Modellklasse. Zum Beispiel Kunde, Mitarbeiter und Produkt. Jetzt habe ich den Klassennamen in einem String. und basierend auf Wenn der Klassenname in einer Zeichenfolge steht, muss ich das Objekt und .__ erstellen. zurück zur ANSICHT. Wie kann ich das erreichen?

Ich kenne eine Option der IF ELSE-Anweisung, möchte aber einen besseren " Dynamic " Weg versuchen ...

19
Dhwani

Wenn der Klassenname in einer Zeichenfolge vorhanden ist, reicht dies nicht aus, um die Instanz erstellen zu können ..__ Sie benötigen einen vollständigen Namespace, einschließlich des Klassennamens, um ein Objekt zu erstellen.

Angenommen, Sie haben Folgendes: 

string className = "MyClass";
string namespaceName = "MyNamespace.MyInternalNamespace";

Dann können Sie eine Instanz dieser Klasse, das Objekt der Klasse MyNamespace.MyInternalNamespace.MyClass, mit einer der folgenden Methoden erstellen:

var myObj = Activator.CreateInstance(namespaceName, className);

oder dieses:

var myObj = Activator.CreateInstance(Type.GetType(namespaceName + "." + className));

Hoffe, das hilft, lass es mich wissen, wenn nicht.

41
Display Name
    string frmName = "frmCustomer";
    //WorldCarUI. is the namespace of the form
    Type CAType = Type.GetType("WorldCarUI." + frmName );
    var myObj = Activator.CreateInstance(CAType);
    Form nextForm2 = (Form)myObj;
    nextForm2.Show();

das funktioniert doch ..

Grüße Avi

9
Avinash

der einfachste Weg ist die Verwendung von Activator. Übergeben Sie den Klassennamen an GetType und erstellen Sie eine neue Instanz.

ClassInstance s1 = (ClassInstance)Activator.CreateInstance(Type.GetType("App.ClassInstance"));

public class ClassInstance
{
    public string StringData { get; set; }
}

Viele Grüße, Nik

2
Nik

Die Activator-Klasse erledigt diese Aufgabe in .net, und diese Technik ist für Szenarien der Abhängigkeitsinjektion sehr nützlich.

string NameSpace = "ProjectName.YourNameSpace";
string ProbeClass = "CLassName";

ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle;
ClassName Prober = ProberHandle.Unwrap() as ClassName;

Stellen Sie sicher, dass Sie unwrap vor dem Typumwandeln verwenden, andernfalls wird ein Konvertierungsfehler ausgegeben.

0