2016-01-21 2 views
0

Я пишу «быстрое» приложение C#, которое позволит мне увидеть все доступные методы в DLL сборки, пока все хорошо, и я могу вывести класс, модификатор доступа и имя :Получение типов и типов подписи метода

private void btnListMethodName() 
    { 
     string sAssemblyFileName = assemblyLocation.Text; 

     if (sAssemblyFileName.Length != 0) 
     { 
      Assembly assem = Assembly.LoadFrom(sAssemblyFileName); 
      Type[] types = assem.GetTypes(); 
      ArrayList arrl = new ArrayList(); 

      foreach (Type cls in types) 
      { 

       try 
       { 
        //Add Class Name      
        arrl.Add(cls.FullName); 
        if (cls.IsAbstract) 
         arrl.Add("Abstract Class:" + cls.Name.ToString()); 
        else if (cls.IsPublic) 
         arrl.Add("Public Class:" + cls.Name.ToString()); 
        else if (cls.IsSealed) 
         arrl.Add("Sealed Class:" + cls.Name.ToString()); 

        MemberInfo[] methodName = cls.GetMethods(); 

        foreach (MemberInfo method in methodName) 
        { 
         method.ReflectedType.GetProperties(); 
         if (method.ReflectedType.IsPublic) 
          arrl.Add("\tPublic - " + method.Name.ToString()); 
         else 
          arrl.Add("\tNon-Public - " + method.Name.ToString()); 
        } 
       } 
       catch (System.NullReferenceException) 
       { 
        Console.WriteLine("Error msg"); 
       } 
      } 
      olvMain.SetObjects(arrl); 

      for (int i = 0; i < arrl.Count; i++) 
      { 
       AssemblyList.Items.Add(arrl[i].ToString()); 
      } 
     } 
    } 

Что мне теперь нужно выводить - это тип данных и имя значений подписи методов. Например, на момент, когда я вывел 'Public - methodName', я хотел бы выводить значение 'Public - methodName (string methodData, int methodData2)'

Возможно ли это?

ответ

2

Вы можете получить такие параметры метода, как это;

ParameterInfo[] pars = method.GetParameters(); 

Для этого вам необходимо сменить;

MemberInfo[] methodName = cls.GetMethods(); 

К

MethodInfo[] methodName = cls.GetMethods(); 

см MethodBase.GetParameters

+0

спасибо за полный ответ. –

2

Ну, вы можете использовать

method.GetParameters()

Wich будет возвращать массив ParameterInfo.

Затем ParameterInfo имеет Name и ParameterType (имеет Name).

+0

'MemberInfo' не имеет' 'GetParameters) метод (. При получении методов OP должен меняться от 'MemberInfo []' до 'MethodInfo []'. – Irshad

+0

@ Irshad, вы правы, используя 'var methodName = cls.GetMethods()' будет тогда хорошо. –

Смежные вопросы