2009-07-29 8 views
12

Je souhaite générer une liste de toutes les méthodes d'une classe ou d'un répertoire de classes. J'ai aussi besoin de leurs types de retour. La sortie dans un fichier texte fera l'affaire ... Est-ce que quelqu'un connaît un outil, un raccord pour VS ou quelque chose qui va faire la tâche? Im en utilisant les codes C# par ailleurs et Visual Studio 2008 comme IDEGénérer Liste des méthodes d'une classe avec les types de méthodes

+0

Avez-vous des assemblages source (.cs) ou compilés? Il y a une énorme différence ... –

+0

Le répertoire des classes suggère que son code ... qui complique un peu les choses –

+0

non, cela complique beaucoup les choses ;-p –

Répondre

31

Bien sûr, utilisez Type.GetMethods(). Vous souhaitez spécifier différents drapeaux de liaison pour obtenir des méthodes non publiques, etc. Ceci est un peu brut, mais le point de départ pratique:

using System; 
using System.Linq; 

class Test 
{ 
    static void Main() 
    { 
     ShowMethods(typeof(DateTime)); 
    } 

    static void ShowMethods(Type type) 
    { 
     foreach (var method in type.GetMethods()) 
     { 
      var parameters = method.GetParameters(); 
      var parameterDescriptions = string.Join 
       (", ", method.GetParameters() 
          .Select(x => x.ParameterType + " " + x.Name) 
          .ToArray()); 

      Console.WriteLine("{0} {1} ({2})", 
           method.ReturnType, 
           method.Name, 
           parameterDescriptions); 
     } 
    } 
} 

Sortie:

System.DateTime Add (System.TimeSpan value) 
System.DateTime AddDays (System.Double value) 
System.DateTime AddHours (System.Double value) 
System.DateTime AddMilliseconds (System.Double value) 
System.DateTime AddMinutes (System.Double value) 
System.DateTime AddMonths (System.Int32 months) 
System.DateTime AddSeconds (System.Double value) 
System.DateTime AddTicks (System.Int64 value) 
System.DateTime AddYears (System.Int32 value) 
System.Int32 Compare (System.DateTime t1, System.DateTime t2) 
System.Int32 CompareTo (System.Object value) 
System.Int32 CompareTo (System.DateTime value) 
System.Int32 DaysInMonth (System.Int32 year, System.Int32 month) 

(etc)

+0

Surintéressé, cela retourne-t-il toutes les méthodes du type courant ou inclut-il aussi toutes les méthodes publiques de ses classes parentes? –

+0

@ LoïcFaure-Lacroix: Il y a un moyen très simple de le tester :) (Je ne m'en souviens pas moi-même, mais c'est facile à tester ...) –

+0

ok, j'ai fait quelques essais. Je suis sûr qu'il montre toutes les méthodes publiques. Cependant, il semble y avoir un attribut "DeclaringType" qui semble être le type qui a déclaré la méthode. Donc, si quelqu'un veut filtrer sur un objet particulier dans la hiérarchie, cela devrait être possible. –

2

Vous pouvez obtenir ces listes très facilement avec la réflexion. par exemple. avec Type.GetMethods()

1
using (StreamWriter sw = new StreamWriter("C:/methods.txt")) 
{ 
     foreach (MethodInfo item in typeof(MyType).GetMethods()) 
     { 
      sw.WriteLine(item.Name); 
     } 
} 
Questions connexes