C # - расследование "Метод" информации с помощью отражения? - PullRequest
2 голосов
/ 22 сентября 2009

Мое намерение состоит в том, чтобы исследовать «Методы» Типа, используя отражение, чтобы проверить следующее:

  1. Методы должны быть методами экземпляра и общедоступными.

  2. Принимает параметр "params" и void в природе.

  3. Метод не выполняет рекурсивный вызов.

Я начал как:

static void ProcessMethodInfo(Type t)
    {
        MethodInfo[] info = t.GetMethods();

        foreach (MethodInfo mi in info)
        {

          // How to check the conditions here ?  

        }
    }

Но я не знаю, как действовать дальше. Нужна помощь.

Ответы [ 4 ]

3 голосов
/ 22 сентября 2009

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

    Type type = ...
    var qry = from method in type.GetMethods(
                  BindingFlags.Instance | BindingFlags.Public)
              where method.ReturnType == typeof(void)
              let parameters = method.GetParameters()
              where parameters.Length == 1
              && parameters[0].ParameterType.IsArray
              && Attribute.IsDefined(parameters[0], typeof(ParamArrayAttribute))
              select method;
    foreach (var method in qry)
    {
        Console.WriteLine(method.Name);
    }
1 голос
/ 22 сентября 2009
0 голосов
/ 22 сентября 2009

Проверьте следующие члены класса MethodInfo:

  • IsPublic
  • IsStatic
  • ReturnType
  • Метод GetParameters ()

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

0 голосов
/ 22 сентября 2009

Не думаю, что вы сможете обнаружить пункт 3 с помощью отражения.

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