[英]C# Reflection Tree
我正在嘗試尋找類似於Visual Studio內置的樹視圖的類,它使您可以遍歷一個類。是否有一個基本的庫/類,該類基本上包含一棵帶有反射數據的樹,該樹遍歷一個類及其子類?我想要代碼,我對單獨的應用程序不感興趣。
我認為通過反射實現起來不會那么困難,但是我希望其他人已經做到了。
我知道您說過要使用代碼,但讓我首先介紹一個名為.Net反射器的工具。 直到最近,它仍然是每個.Net開發人員執行您所談論的內容的必備工具。 幾年前,它被紅門公司接管,最近他們表示將開始為此收費。
由於紅門將為反射器收費,因此許多開源項目正在加快開發替代品的速度。 如果我必須預測未來,我會說ILSpy最有可能成功,因為它是由SharpDevelop團隊推出的。
ILSpy: ILSpy信息頁面
如果您只是想遍歷嵌套類,請參見以下示例
public Form1()
{
InitializeComponent();
Assembly assembly = Assembly.GetAssembly(typeof (DateTime));
foreach (var exportedType in assembly.GetExportedTypes())
{
var parentNode = treeView1.Nodes.Add(exportedType.Name);
AddNodes(exportedType, parentNode);
}
}
private void AddNodes(Type type,TreeNode node)
{
foreach (var nestedType in type.GetNestedTypes())
{
var nestedNode = node.Nodes.Add(nestedType.Name);
AddNodes(nestedType, nestedNode);
}
}
在這種情況下,也許您還需要有關方法,屬性等的一些信息,就可以使用
type.GetProperties();
type.GetMethods();
type.GetMembers();
type.GetEvents();
type.GetInterfaces();
在搜索子類時,首先需要定義邊界。 您要在特定程序集中搜索子類嗎? 如果是,那么這是您需要的代碼:
Type t = typeof(System.Nullable);
System.Reflection.Assembly a = System.Reflection.Assembly.GetAssembly("System.DLL");
Type[] types = a.GetTypes();
foreach (Type type in types)
{
if (type.IsSubclassOf(t))
Console.Write(type.ToString());
}
在上面的代碼中,它在System.DLL中搜索Nullable的所有子類。 要獲取當前程序集中的子類,只需使用以下命令獲取當前程序集
a = System.Reflection.Assembly.GetExecutingAssembly()
Type
類提供了大量信息。 Assembly
課也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.