2016-01-21 68 views
0

我正在編寫一個'quick'c#應用程序,它允許我在Assembly 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'我想輸出'公共 - methodName(字符串methodData,int methodData2)'

這可能嗎?

回答

2

您可以像這樣獲取方法的參數;

ParameterInfo[] pars = method.GetParameters(); 

要做到這一點,你需要改變;

MemberInfo[] methodName = cls.GetMethods(); 

MethodInfo[] methodName = cls.GetMethods(); 

參見MethodBase.GetParameters

+0

感謝您的完整答案。 –

2

好了,你可以使用

method.GetParameters()

至極將返回ParameterInfo數組。

然後,ParameterInfo具有NameParameterType(其具有Name)屬性。

+0

'MemberInfo'不具有'GetParameters()'方法。獲取方法時,OP必須從'MemberInfo []'更改爲'MethodInfo []'。 – Irshad

+0

@Irshad你是對的,使用var methodName = cls.GetMethods()'就可以了。 –