Дерево отражения C # - PullRequest
       0

Дерево отражения C #

5 голосов
/ 04 марта 2011

Я пытаюсь найти что-то похожее на древовидную структуру, встроенную в Visual Studio, которая позволяет вам проходить через класс. Существует ли базовая библиотека / класс, который в основном содержит дерево с отраженными данными, которое перебирает класс и его подклассы? Iхочу код, меня не интересуют отдельные приложения.

Я не думаю, что это будет так сложно реализовать с помощью рефлексии, но я надеюсь, что кто-то другой уже сделал это.

Ответы [ 3 ]

2 голосов
/ 04 марта 2011

Если вы просто хотите перебрать вложенный класс, вот пример

    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);
        }
    }

Может быть, вам также нужна информация о методах, свойствах e.t.c, в этом случае вы можете использовать

    type.GetProperties();
    type.GetMethods();
    type.GetMembers();
    type.GetEvents();
    type.GetInterfaces();
2 голосов
/ 04 марта 2011

Я знаю, что вы заявили, что хотите код, но позвольте мне начать с упоминания инструмента под названием .Net рефлектор. До недавнего времени это был инструмент для каждого разработчика .Net, позволяющий делать то, о чем вы говорите. Он был захвачен Red-Gate несколько лет назад, и недавно они заявили, что собираются начать взимать за него плату.

Поскольку Red-Gate будет взимать плату за рефлектор, довольно много проектов с открытым исходным кодом наращивают разработку для замены. Если бы мне пришлось предсказывать будущее, я бы сказал, что у ILSpy больше шансов на успех, потому что его выпускает команда SharpDevelop.

ILSpy: Информационная страница ILSpy

1 голос
/ 04 марта 2011

При поиске подклассов, первое, что вам нужно, это определить границы.Вы ищете подклассы в определенной сборке?Если да, то этот код вам понадобится:

    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());
    }

В приведенном выше коде выполняется поиск всех подклассов Nullable в System.DLL.Чтобы получить подклассы в текущей сборке, просто получите текущую сборку, используя

a = System.Reflection.Assembly.GetExecutingAssembly()

. Класс Type предоставляет много информации.Так же как и Assembly класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...