Получить метод по отражению не удалось - PullRequest
2 голосов
/ 25 августа 2011

У меня есть следующий метод: Gl :

public static void Get(int pname, out int @params)

Я пытаюсь получить его, используя отражение следующим образом:

MethodInfo mGetMethod = typeof(Gl).GetMethod("Get",
                                             BindingFlags.Public|BindingFlags.Static,
                                             null, 
                                             new Type[] 
                                             { 
                                                 typeof(Int32), 
                                                 typeof(Int32) 
                                             }, 
                                             null);

Но у меня нет успеха.Почему?

Это потому, что ключевое слово out ?

Ответы [ 4 ]

7 голосов
/ 25 августа 2011

Используйте typeof(Int32).MakeByRefType() для второго параметра.Т.е.:

MethodInfo mGetMethod = typeof(Gl).GetMethod("Get", bindingFlags.Public|BindingFlags.Static, null, new Type[] { typeof(Int32), typeof(Int32).MakeByRefType() }, null);
1 голос
/ 25 августа 2011

Ключевое слово out передает параметр по ссылке, что, вероятно, является вашей проблемой. Вам нужно будет пометить его как ссылочный тип, поскольку C # позволяет перегружать методы с помощью параметров byValue и byReference.

1 голос
/ 25 августа 2011

Если вам нужно указать конкретную перегрузку для метода, определенно следуйте тому, что сказал @Isaac Overacker. В противном случае просто не указывайте параметры:

MethodInfo mGetMethod = typeof(Gl).GetMethod("Get", BindingFlags.Public | BindingFlags.Static);
0 голосов
/ 25 августа 2011

Как насчет попробовать что-то вроде этого:

MethodInfo method = this.GetType().GetMethod("Get");
if (method != null)
{
    method.Invoke(this, new object[] { "Arg1", "Arg2", "Arg3" });
}
...