2012-02-10 76 views
1

有沒有一種很好的方式來打印我的項目或文件中所有方法的列表?C# - >看代碼的代碼

從那裏,類或變量列表等

+1

查看紅色門反射器。 – Yuck 2012-02-10 15:50:02

+0

您可以在反射命名空間中使用各種各樣的東西來查詢程序集包含它們包含的類,它們具有的方法等。 – Chris 2012-02-10 15:51:03

+0

...或者ILSpy,JustDecompile,DotPeek(這些實際上是免費的)。 – 2012-02-10 15:51:42

回答

2

您正在尋找System.Reflection命名空間。你必須玩的的BindingFlags枚舉得到你想要的東西,但這裏有一個簡單的例子程序:

using System; 
using System.Reflection; 

namespace ReflectionExample 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      Type[] types = typeof (MyClass).Assembly.GetTypes(); 

      foreach (Type type in types) 
      { 
       Console.WriteLine(type.Name); 

       MemberInfo[] members = type.GetMembers(
        BindingFlags.Instance | BindingFlags.Public 
        | BindingFlags.FlattenHierarchy | BindingFlags.DeclaredOnly); 

       foreach (MemberInfo memberInfo in members) 
       { 
        Console.WriteLine("\t" + memberInfo.Name); 
       } 
      } 

      Console.ReadLine(); 
     } 

     public class MyClass 
     { 
      public int Bar { get; set; } 

      public void AMethod() 
      { 
       Console.WriteLine("foo"); 
      } 

      public void BMethod() 
      { 
       Console.WriteLine("foo"); 
      } 

      public void CMethod() 
      { 
       Console.WriteLine("foo"); 
      } 
     } 
    } 
} 

或者,你可以記錄///項目中的一切,然後打開XML文檔輸出在您的項目設置中。我想這取決於你需要這份清單。

1

您可以使用反射來列出類,方法,屬性。

這裏 Reflection

希望這有助於。

0

有了反射,你可以找到任何關於函數,類等元數據。 C#對它有很好的支持。

2

取決於你正在嘗試做什麼。如果你想分析你的.NET可執行文件,你可以使用一個免費的反編譯工具(dotPeekILSpy,甚至.NET Reflector)。然而,如果你在運行時查找這些信息,也就是說,你想要打印在你的應用程序中執行的所有類型和方法,你可以使用Reflection(CodeProject上的good tutorial),或者使用AOP解決方案(如PostSharp)打印所有執行方法的名稱(請參見Tracing example)。

0
 string dllPathName = @"dllPath\dllFileName"; 
     string outputFilePathName = @"outputPath\outputFileName"; 
     System.Reflection.Assembly fileNetAssembly = System.Reflection.Assembly.LoadFrom(dllPathName); 
     StringBuilder sb = new StringBuilder(); 

     foreach (Type cls in fileNetAssembly.GetTypes()) 
     { 
      //only printing non interfaces that are abstract, public or sealed 
      sb.Append(!cls.IsInterface ? (cls.IsAbstract ? string.Format("Class: {0} is Abstract.{1}", cls.Name, System.Environment.NewLine) : 
              cls.IsPublic ? string.Format("Class: {0} is Public.{1}", cls.Name, System.Environment.NewLine) : 
              cls.IsSealed ? string.Format("Class: {0} is Sealed.{1}", cls.Name, System.Environment.NewLine) : 
              string.Empty) : 
             string.Empty); 

      if (!cls.IsInterface && (cls.IsAbstract || cls.IsPublic || cls.IsSealed)) 
      { 
       //printing all methods within the class 
       foreach (System.Reflection.MemberInfo method in cls.GetMethods()) 
       { 
        sb.Append("\t- "); 
        sb.Append(method.Name); 
        sb.Append(System.Environment.NewLine); 
       } 
      } 
     } 

     //output the file 
     File.WriteAllText(outputFilePathName, sb.ToString());