Chcę to zrobić w C #, ale nie wiem jak:
Mam ciąg z nazwą klasy -eg: FooClass
i chcę wywołać metodę (statyczną) w tej klasie:
FooClass.MyMethod();
Oczywiście muszę znaleźć odniesienie do klasy poprzez refleksję, ale jak?
źródło
Chcę to zrobić w C #, ale nie wiem jak:
Mam ciąg z nazwą klasy -eg: FooClass
i chcę wywołać metodę (statyczną) w tej klasie:
FooClass.MyMethod();
Oczywiście muszę znaleźć odniesienie do klasy poprzez refleksję, ale jak?
Będziesz chciał użyć Type.GetType
metody.
Oto bardzo prosty przykład:
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");
}
}
Mówię proste, ponieważ bardzo łatwo jest znaleźć w ten sposób typ, który jest wewnętrzny dla tego samego zespołu. Zapoznaj się z odpowiedzią Jona, aby uzyskać dokładniejsze wyjaśnienie, co musisz o tym wiedzieć. Po pobraniu typu mój przykład pokazuje, jak wywołać metodę.
Możesz użyć Type.GetType(string)
, ale musisz znać pełną nazwę klasy, w tym przestrzeń nazw, a jeśli nie ma jej w bieżącym zestawie lub mscorlib, będziesz potrzebować zamiast tego nazwy zestawu. (Idealnie, użyjAssembly.GetType(typeName)
zamiast tego - uważam, że jest to łatwiejsze pod względem uzyskania prawidłowego odniesienia do zestawu!)
Na przykład:
// "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");
Proste użycie:
Type typeYouWant = Type.GetType("NamespaceOfType.TypeName, AssemblyName");
Próba:
Type dogClass = Type.GetType("Animals.Dog, Animals");
źródło
Trochę za późno na odpowiedź, ale to powinno załatwić sprawę
Type myType = Type.GetType("AssemblyQualifiedName");
kwalifikowana nazwa twojego zestawu powinna być taka
"Boom.Bam.Class, Boom.Bam, Version=1.0.0.262, Culture=neutral, PublicKeyToken=e16dba1a3c4385bd"
źródło
Poprzez Type.GetType można uzyskać informacje o typie. Możesz użyć tej klasy, aby uzyskać informacje o metodzie, a następnie wywołać metodę (w przypadku metod statycznych pozostaw pierwszy parametr o wartości null).
Możesz również potrzebować nazwy zestawu, aby poprawnie zidentyfikować typ.
źródło
Możemy użyć
aby uzyskać nazwę klasy, a także utworzyć jej obiekt za pomocą
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; } } }
źródło