2009-07-29 17 views
12

Chcę wygenerować listę wszystkich metod w klasie lub w katalogu klas. Potrzebuję również ich typów zwrotu. Wyprowadzenie go do pliku tekstowego zrobi ... Czy ktoś wie o narzędziu, sprzęcie dla VS lub coś, co wykona zadanie? Im przy użyciu C# przy okazji i Visual Studio 2008 jako IDEWygeneruj listę metod klasy z typami metod

+0

Czy masz źródło (.cs), czy skompilowałeś złożenia? Jest ogromna różnica ... –

+0

Katalog klas sugeruje, że jego kod ... to komplikuje rzeczy nieco –

+0

nie, to bardzo komplikuje rzeczy ;-p –

Odpowiedz

31

Oczywiście - użyj Type.GetMethods(). Będziemy chcieli, aby określić różne flagi wiążących aby uzyskać metody niepubliczne itp Jest to dość surowy, ale wykonalne punkt wyjścia:

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

wyjściowa:

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

Co ciekawe, czy to zwraca wszystkie metody bieżącego typu, czy też zawiera wszystkie publiczne metody jego klas macierzystych? –

+0

@ LoïcFaure-Lacroix: Istnieje bardzo prosty sposób na sprawdzenie go :) (Nie pamiętam od siebie, ale łatwo jest przetestować ...) –

+0

OK, zrobiłem kilka testów. Jestem prawie pewien, że pokazuje wszystkie publiczne metody. Chociaż wydaje się, że istnieje atrybut "DeclaringType", który wydaje się być typem, który zadeklarował metodę. Jeśli więc ktoś chce filtrować dany obiekt w hierarchii, powinno to być możliwe. –

2

Możesz dostać się na tych listach bardzo łatwo z refleksji. na przykład z Type.GetMethods()

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