簡體   English   中英

C#反射樹

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM