Вызов метода по статическому классу при задании имени и имени метода в виде строк
Как я могу вызвать вызов метода для статического класса с именем класса и именем метода?
Например:
Учитывая 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;