Вызов метода по статическому классу при задании имени и имени метода в виде строк

Как я могу вызвать вызов метода для статического класса с именем класса и именем метода?

Например:

Учитывая System.Environment и GetFolderPath, я хотел бы использовать Reflection для вызова Environment.GetFolderPath().

Ответы

Ответ 1

Просто

Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments);

где typeName - это имя типа в виде строки, methodName - это имя метода в виде строки, а arguments - массив объектов, содержащих аргументы для вызова метода с.

Ответ 2

Сначала вам нужно получить Type (путем итерации на сборке с использованием отражения)

см. эту ссылку для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

или используйте

Assembly.GetType

как только у вас есть тип в руке, вы можете перебирать элементы с использованием отражения или

MethodInfo method = typeof(MyClass).GetMethod("MyMethod");

то вы можете использовать MethodInfo.Invoke и передать аргументы для вызова метода, когда вы хотите его вызывать.

Ответ 3

Вот основные сведения о том, что вы будете делать:

  • Сканировать все объекты в текущем AppDomain - найти ту, которая соответствует тому, что вы знаете, имя класса
  • Получить статический метод с именем, которое вы знаете на этом объекте
  • Динамически вызывать его.

Изменить: Это будет работать, если вы не знаете пространства имен статического класса. В противном случае используйте решение Daniel Brückner как намного проще.

Ответ 4

System.Reflection.Assembly info = typeof(System.Environment).Assembly;

Type t = info.GetType("System.Environment");
MethodInfo m = t.GetMethod("GetFolderPath");

object result = m.Invoke(null, arguments);

Ответ 5

То, что вы здесь делаете, отражает тип с именем Environment и использует методы GetPropery и GetGetMethod, чтобы получить метод get свойства Environment.CurrentDirectory, например:

var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod();
var currentDirectory = (string)getMethod.Invoke(null, null);

Вызов метода get свойства возвращает его значение и эквивалентно:

var value = Environment.CurrentDirectory;