Я хочу зробити це на 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, достатньо вказати ім'я типу, визначене його простором імен.
Ми можемо використовувати
Type.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; }
}
}