2009-07-29 16 views
12

クラス内またはクラスのディレクトリ内のすべてのメソッドのリストを生成したいと思います。私はまた、彼らの戻り値の型が必要です。それをテキストファイルに出力することは...誰でもツールのことを知っていますか? ImとVisual Studio 2008をIDEとして使用しているC#コードメソッドの型を持つクラスのメソッドのリストを生成

+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

ok、私はいくつかのテストを行いました。私はそれがすべてのパブリックメソッドを示していることは確かです。しかし、メソッドを宣言した型のように見える属性 "DeclaringType"があるようです。したがって、階層内の特定のオブジェクトをフィルタリングしたい場合は、それが可能でなければなりません。 –

2

これらのリストは非常に簡単に反映されています。例えばwith Type.GetMethods()

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