2009-07-29 4 views
12

Я хочу сгенерировать список всех методов в классе или в каталоге классов. Мне также нужны их типы возврата. Вывод его в текстовый файл будет ... Кто-нибудь знает инструмент, привязку для VS или что-то, что сделает задачу? Im использует коды C# кстати и Visual Studio 2008 как IDEСоздать список методов класса с типами методов

+0

У вас есть источник (.cs) или скомпилированные сборки? Существует огромная разница ... –

+0

Каталог классов предполагает, что его код ... что усложняет вещи немного –

+0

нет, это очень усложняет вещи ;-p –

ответ

31

Уверенный - используйте Type.GetMethods(). Вы хотите, чтобы указать различные обязательные флаги, чтобы получить непубличные методы и т.д. Это довольно сырой, но работоспособным отправной точкой:

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

Выход:

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) 

(и т.д.)

+0

Из интереса, возвращает ли это все методы текущего типа или включает также все общедоступные методы его родительских классов? –

+0

@ LoïcFaure-Lacroix: Есть очень простой способ проверить это :) (я не могу запомнить себя, но легко проверить ...) –

+0

Хорошо, я сделал несколько тестов. Я уверен, что он показывает все общедоступные методы. Хотя, кажется, есть атрибут DeclaringType, который, по-видимому, является типом, объявляющим метод. Поэтому, если кто-то хочет фильтровать определенный объект в иерархии, это должно быть возможно. –

2

Вы можете легко получить эти списки с отражением. например с Type.GetMethods()

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