Как передать имя класса и метода в виде строки и вызвать метод этого класса?
Нравиться
void caller(string myclass, string mymethod){
// call myclass.mymethod();
}
Спасибо
Как передать имя класса и метода в виде строки и вызвать метод этого класса?
Нравиться
void caller(string myclass, string mymethod){
// call myclass.mymethod();
}
Спасибо
Вы можете использовать отражение.
Вот простой пример:
using System;
using System.Reflection;
class Program
{
static void Main()
{
caller("Foo", "Bar");
}
static void caller(String myclass, String mymethod)
{
// Get a type from the string
Type type = Type.GetType(myclass);
// Create an instance of that type
Object obj = Activator.CreateInstance(type);
// Retrieve the method you are looking for
MethodInfo methodInfo = type.GetMethod(mymethod);
// Invoke the method on the instance we created above
methodInfo.Invoke(obj, null);
}
}
class Foo
{
public void Bar()
{
Console.WriteLine("Bar");
}
}
Теперь это очень простой пример, лишенный проверки ошибок, а также игнорирующий более серьезные проблемы, например, что делать, если тип находится в другой сборке, но я думаю, что это должно направить вас на правильный путь.
parameter count mismatch на methodInfo.Invoke(obj, null)
- person aadi1295; 13.04.2017
Что-то вроде этого:
public object InvokeByName(string typeName, string methodName)
{
Type callType = Type.GetType(typeName);
return callType.InvokeMember(methodName,
BindingFlags.InvokeMethod | BindingFlags.Public,
null, null, null);
}
Вы должны изменить флаги привязки в соответствии с методом, который вы хотите вызвать, а также проверить метод Type.InvokeMember в msdn, чтобы быть уверенным в том, что вам действительно нужно.
По какой причине вы это делаете? Скорее всего, вы можете сделать это без отражения, вплоть до динамической загрузки сборки.