Вызывать нестатический метод в 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) выше.

Другие вопросы по тегам