Вызывать нестатический метод в C#
Я хочу, чтобы вызвать класс "***" - это решение, которое работает для меня, но я хочу вызвать это решение, которое дает мне ошибку:
Type t = Type.GetType(svClass);
MethodInfo method = t.GetMethod("execute", BindingFlags.instance| BindingFlags.Public);
Ret = (string)method.Invoke(null, new object[] { context.Request});
public string execute(HttpRequest req)
так что я пытался MethodInfo method = t.GetMethod("execute", BindingFlags.instance | BindingFlags.Public);
но это дает мне ошибку "нестатический метод требует цели"
*** ЭТО РАБОЧЕЕ РЕШЕНИЕ ДЛЯ СТАТИЧЕСКОГО МЕТОДА
Type t = Type.GetType(svClass);
MethodInfo method = t.GetMethod("execute", BindingFlags.static| BindingFlags.Public);
Ret = (string)method.Invoke(null, new object[] { context.Request});
вызывать
public class XXXXX
{
public static string execute(HttpRequest req){}
}
1 ответ
Секрет в том, чтобы изменить ваши флаги привязки, чтобы получить MethodInfo, который соответствует сигнатуре метода, который вы хотите вызвать.
Например:
public static string execute(HttpRequest req){}
Будет доступно через
MethodInfo method = t.GetMethod("execute", BindingFlags.static| BindingFlags.Public);
Однако для доступа
public string execute(HttpRequest req){}
тебе нужно сделать
var classObj = new Class();
MethodInfo method = classObj.GetType().GetMethod("execute", BindingFlags.Instance| BindingFlags.Public);
Экземпляр означает, что метод является членом объекта класса, а не типа класса. (Экземпляр против Статического)
var parameterArray = new object[]{ YourHttpRequestHere};
var result = method.Invoke(classObj,parameterArray);
Помните, что если метод принадлежит экземпляру, то вам нужно извлечь метод из этого типа экземпляра, а затем вызвать его со ссылкой на переменную экземпляра (classObj) выше.