Antworten:
Sie möchten die Type.GetType
Methode verwenden.
Hier ist ein sehr einfaches Beispiel:
using System;
using System.Reflection;
class Program
{
static void Main()
{
Type t = Type.GetType("Foo");
MethodInfo method
= t.GetMethod("Bar", BindingFlags.Static | BindingFlags.Public);
method.Invoke(null, null);
}
}
class Foo
{
public static void Bar()
{
Console.WriteLine("Bar");
}
}
Ich sage einfach, weil es sehr einfach ist, auf diese Weise einen Typ zu finden, der sich innerhalb derselben Baugruppe befindet. In Jons Antwort finden Sie eine ausführlichere Erklärung, was Sie darüber wissen müssen. Nachdem Sie den Typ abgerufen haben, zeigt Ihnen mein Beispiel, wie Sie die Methode aufrufen.
Sie können verwenden Type.GetType(string)
, müssen jedoch den vollständigen Klassennamen einschließlich des Namespace kennen. Wenn er nicht in der aktuellen Assembly oder mscorlib enthalten ist, benötigen Sie stattdessen den Assemblynamen. (Idealerweise Assembly.GetType(typeName)
stattdessen verwenden - ich finde das einfacher, wenn es darum geht, die Baugruppenreferenz richtig zu machen!)
Zum Beispiel:
// "I know String is in the same assembly as Int32..."
Type stringType = typeof(int).Assembly.GetType("System.String");
// "It's in the current assembly"
Type myType = Type.GetType("MyNamespace.MyType");
// "It's in System.Windows.Forms.dll..."
Type formType = Type.GetType ("System.Windows.Forms.Form, " +
"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, " +
"PublicKeyToken=b77a5c561934e089");
Eine einfache Verwendung:
Type typeYouWant = Type.GetType("NamespaceOfType.TypeName, AssemblyName");
Stichprobe:
Type dogClass = Type.GetType("Animals.Dog, Animals");
Etwas spät zur Antwort, aber das sollte reichen
Type myType = Type.GetType("AssemblyQualifiedName");
Ihr qualifizierter Name für die Baugruppe sollte so lauten
"Boom.Bam.Class, Boom.Bam, Version=1.0.0.262, Culture=neutral, PublicKeyToken=e16dba1a3c4385bd"
Über Type.GetType können Sie die Typinformationen abrufen . Mit dieser Klasse können Sie die Methodeninformationen abrufen und dann die Methode aufrufen (für statische Methoden lassen Sie den ersten Parameter null).
Möglicherweise benötigen Sie auch den Namen der Baugruppe , um den Typ korrekt zu identifizieren.
Befindet sich der Typ in der aktuell ausgeführten Assembly oder in Mscorlib.dll, reicht es aus, den durch seinen Namespace qualifizierten Typnamen anzugeben.
Wir können benutzen
Type.GetType ()
um Klassennamen zu erhalten und kann auch ein Objekt davon mit erstellen Activator.CreateInstance(type);
using System;
using System.Reflection;
namespace MyApplication
{
class Application
{
static void Main()
{
Type type = Type.GetType("MyApplication.Action");
if (type == null)
{
throw new Exception("Type not found.");
}
var instance = Activator.CreateInstance(type);
//or
var newClass = System.Reflection.Assembly.GetAssembly(type).CreateInstance("MyApplication.Action");
}
}
public class Action
{
public string key { get; set; }
public string Value { get; set; }
}
}