Я хочу сделать это на C #, но не знаю как:
У меня есть строка с именем класса -eg: FooClassи я хочу вызвать (статический) метод для этого класса:
FooClass.MyMethod();
Очевидно, мне нужно найти ссылку на класс через отражение, но как?
Ответы:
Вы захотите использовать этот Type.GetTypeметод.
Вот очень простой пример:
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");
}
}
Я говорю просто, потому что таким образом очень легко найти тип, который является внутренним для той же сборки. См . Ответ Джона для более подробного объяснения того, что вам нужно знать об этом. После того, как вы получили тип, мой пример показывает вам, как вызвать метод.
Вы можете использовать Type.GetType(string), но вам нужно знать полное имя класса, включая пространство имен, и если его нет в текущей сборке или mscorlib, вам потребуется имя сборки. (В идеале используйтеAssembly.GetType(typeName) вместо этого - я считаю, что это проще с точки зрения получения правильной ссылки на сборку!)
Например:
// "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");
Простое использование:
Type typeYouWant = Type.GetType("NamespaceOfType.TypeName, AssemblyName");
Образец:
Type dogClass = Type.GetType("Animals.Dog, Animals");
Немного поздно для ответа, но это должно помочь
Type myType = Type.GetType("AssemblyQualifiedName");
ваше полное имя сборки должно быть таким
"Boom.Bam.Class, Boom.Bam, Version=1.0.0.262, Culture=neutral, PublicKeyToken=e16dba1a3c4385bd"
Через Type.GetType вы можете получить информацию о типе. Вы можете использовать этот класс, чтобы получить информацию о методе, а затем вызвать метод (для статических методов оставьте первый параметр пустым).
Вам также может потребоваться имя сборки, чтобы правильно идентифицировать тип.
Если тип находится в выполняющейся в данный момент сборке или в Mscorlib.dll, достаточно указать имя типа, определяемое его пространством имен.
Мы можем использовать
Тип.GetType ()
чтобы получить имя класса, а также создать его объект, используя 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; }
}
}