Я хочу сделать это на 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; }
}
}