Как позвонить в MethodInfo? - PullRequest
       1

Как позвонить в MethodInfo?

0 голосов
/ 15 декабря 2011

У меня есть MethodInfo объект, который определяет метод, который я хочу вызвать.

За исключением того, что мне нужен object, из которого MethodInfo пришло.

псевдокод:

void CallMethod(MethodInfo m)
{
    Object o = Activator.CreateInstance(m.ClassType);
    o.GetType().InvokeMember(m.Name, BindingFlags.InvokeMethod, null, o, null);
}

За исключением того, что я не знаю, как получить type класса, к которому принадлежит MethodInfo.

Как я могу вызвать MethodInfo?

Ответы [ 4 ]

5 голосов
/ 15 декабря 2011

MethodInfo не знает цель вызова метода - MethodInfo фактически принадлежит типу , а не одному конкретному объекту.

У вас должен быть экземпляр целевого типа для вызова метода.Вы можете легко найти тип, используя MethodInfo.DeclaringType (унаследованный от MemberInfo.DeclaringType), но у вас может не быть экземпляра в этот момент ...

Как отметил Рид, MemberInfo.ReflectedType может быть более подходящим, чем DeclaringType, в зависимости от того, как вы планируете его использовать.

Вы ничего не объяснили о том, что вы делаете, но это может бытьболее уместно взять делегат Action вместо MethodInfo, если остальная часть вашего проекта может быть изменена соответствующим образом.

2 голосов
/ 15 декабря 2011

Это создаст объект из типа вашего MethodInfo и вызовет его для вас для этого нового объекта.

void CallMethod(MethodInfo m)
{
    Object o = Activator.CreateInstance(m.ReflectedType);
    m.Invoke(o, null);
}
0 голосов
/ 15 декабря 2011

Возможно, я неправильно понимаю вопрос, но звучит так, будто вы ищете делегата, а не MethodInfo.

void Main()
{
    Object myObject = new ArrayList();
    MethodInfo methodInfo = myObject.GetType().GetMethod("Clear");
    Delegate method = Delegate.CreateDelegate(typeof(Action), myObject, methodInfo, true);
    CallMethod(method);
}

void CallMethod(Delegate method)
{
    method.DynamicInvoke();
}

Очевидно, что в этом случае проще получить делегата (method = new Action(myObject.Clear)), но я собираюсь ответить на ваш вопрос о необходимости использования объекта MethodInfo.

0 голосов
/ 15 декабря 2011

Вы можете определить тип, который определяет метод, используя свойство DeclaringType объекта MethodInfo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...