C # Type.GetMethods () не возвращает метод Main () - PullRequest
1 голос
/ 06 октября 2010

Я пишу инструмент отражения, который буду использовать для вызова методов различных типов, и я тестирую его на простых программах.

Мне любопытно, почему он не возвращает мой метод Main() в стандартном классе сгенерированной программы Visual Studio

class Program { static void Main(string[] args) { return ; }

Когда я загружаю, набираю Program и вызываю type.GetMethods(); он возвращает 4 метода, унаследованных от Object: ToString, GetHashCode, GetType и Equals.

Полагаю, Main - это особый метод, так как это точка входа в программу, но должен быть способ получить ее MethodInfo. Есть ли способ получить его?

Ответы [ 5 ]

8 голосов
/ 06 октября 2010

Ваш Main метод является частным, поэтому вам нужно включить BindingFlags.NonPublic.

(BindingFlags.Static включено по умолчанию, но NonPublic нет.)

Итак:

var methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic |
                              BindingFlags.Static | BindingFlags.Instance);

(Я предполагаю, что вы, конечно, хотите использовать методы public и instance).

Хотя Main определена здесь как точка входа, больше ничего особенного в этом нет - вы можете найти ее так же, как и другие методы, и вызвать ее тоже.

3 голосов
/ 06 октября 2010

GetMethods() возвращает все публичные методы текущего Типа.

Вы должны использовать GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic)

Подробнее о методах Type.Get (BindingsFlags)

2 голосов
/ 06 октября 2010

Проблема в том, что Main () является приватным и статическим.Попробуйте это:

      MethodInfo[] methods = typeof(Program).GetMethods(BindingFlags.Public
                                                      | BindingFlags.NonPublic
                                                      | BindingFlags.Static
                                                      | BindingFlags.Instance
                                                      );
1 голос
/ 06 октября 2010

Main () не является общедоступным по умолчанию:

type.GetMethods(BindingFlags.Static | BindingFlags.NonPublic);
0 голосов
/ 06 октября 2010

Пожалуйста, используйте BindingFlags.Static при звонке GetMethods.

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