2009-07-29 17 views
12

Deseo generar una lista de todos los métodos en una clase o en un directorio de clases. También necesito sus tipos de devolución. Emitirlo a un archivo de texto servirá ... ¿Alguien sabe de una herramienta, un complemento para VS o algo que hará la tarea? Estoy usando códigos C# por cierto y Visual Studio 2008 como IDEGenerar Lista de métodos de una clase con tipos de método

+0

¿Tiene fuente (.cs) o ensamblajes compilados? Hay una gran diferencia ... –

+0

El directorio de clases sugiere que su código ... eso complica las cosas un poco –

+0

no, complica mucho las cosas ;-p –

Respuesta

31

Sure - use Type.GetMethods(). Usted querrá especificar diferentes banderas de unión para conseguir métodos no públicos, etc. Este es un crudo bonita, pero el punto de partida viable:

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); 
     } 
    } 
} 

Salida:

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

Fuera de interés, ¿devuelve todos los métodos del tipo actual o también incluye todos los métodos públicos de sus clases principales? –

+0

@ LoïcFaure-Lacroix: Hay una manera muy fácil de probarlo :) (No recuerdo bien, pero es fácil de probar ...) –

+0

bien, hice algunas pruebas. Estoy bastante seguro de que muestra todos los métodos públicos. Sin embargo, parece haber un atributo "DeclaringType" que parece ser el tipo que declaró el método. Entonces, si alguien quiere filtrar un objeto particular en la jerarquía, debería ser posible. –

2

Puede acceder a estas listas muy fácilmente con la reflexión. p.ej. con Type.GetMethods()

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