1
A
回答
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
0
我不確定打印功能,但你看過.Net Reflector?
0
有了反射,你可以找到任何關於函數,類等元數據。 C#對它有很好的支持。
2
取決於你正在嘗試做什麼。如果你想分析你的.NET可執行文件,你可以使用一個免費的反編譯工具(dotPeek,ILSpy,甚至.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());
相關問題
- 1. 查看語言(C/C++)的代碼塊
- 2. 查看代碼
- 3. VB.NET代碼比C#代碼
- 4. VB代碼到C#代碼
- 5. 代碼 - >迅速
- 6. Xamarin - 查看生成的Objective C代碼?
- 7. Objective-C代碼到C代碼
- 8. C#winforms代碼到C#wpf代碼
- 9. C++代碼(malloc方法)以c#代碼
- 10. C#httplistener解析<% c# %>代碼
- 11. 的C++代碼
- 12. 查看此代碼
- 13. C++代碼片段的彙編代碼
- 14. 訪問C代碼的HTML代碼#
- 15. 代碼QSORT代碼的說明C
- 16. C++代碼中的彙編代碼
- 17. C代碼的Delphi等效代碼
- 18. 插入javascript代碼中的c#代碼
- 19. shell的僞代碼爲C++代碼
- 20. TensorFlow中C代碼的代碼完成
- 21. JavaScript中的驗證碼顯示代碼查看源代碼
- 22. css代碼< >
- 23. Visual Studio C++:查看ASM代碼?
- 24. 查看編譯器擴展代碼 - C++
- 25. 查看彙編和C代碼
- 26. 看不懂這行C代碼
- 27. 綁定在CollectionViewSource - >查看 - >組 - >計數(代碼vs XAML)
- 28. C#自定義屬性代碼 - >看看它與之相關的字段
- 29. C#Vector2代碼
- 30. RemotingMultiClientsHelp c#代碼
查看紅色門反射器。 – Yuck 2012-02-10 15:50:02
您可以在反射命名空間中使用各種各樣的東西來查詢程序集包含它們包含的類,它們具有的方法等。 – Chris 2012-02-10 15:51:03
...或者ILSpy,JustDecompile,DotPeek(這些實際上是免費的)。 – 2012-02-10 15:51:42