Найти предков класса в C#

Пример Найти классы, реализующие интерфейс или являющиеся потомками данного класса в C# , показывает, как найти список классов, которые являются потомками класса или интерфейса. В этом примере используется аналогичный код для списка классов. Затем, если вы нажмете на класс в списке слева, программа использует следующий код для отображения предков класса для выбранного класса в списке справа.

// Отображение предков выбранного класса.
private void lstClasses_SelectedIndexChanged(object sender, EventArgs e)
{
    lstAncestors.Items.Clear();
    if (lstClasses.SelectedIndex == -1) return;
    Cursor = Cursors.WaitCursor;
    Refresh();

    // Получить тип.
    List types = new List();
    TypeInfo the_type = (TypeInfo)lstClasses.SelectedItem;
    types.Add(the_type);
    for (Type parent = the_type.TheType.BaseType;
        parent != null;
        parent = parent.BaseType)
    {
        types.Insert(0, new TypeInfo(parent));
    }
    for (int i = 0; i < types.Count; i++)
    {
        lstAncestors.Items.Add(
            new string(' ', i * 2) + types[i].TheType.Name);
    }

    Cursor = Cursors.Default;
}

Код очищает результат ListBox. Затем он создает List объектов TypeInfo, называемых types, для хранения предка выбранного класса. Класс TypeInfo, который содержит объекты Type и их имена, описывается в ближайшее время.

Код получает объект TypeInfo, который был нажат в левой ListBox и добавляет его в список types.

Затем код вводится в цикл. Он устанавливает переменную parent равную родительскому элементу выбранного типа. Пока parent не является null, программа вставляет новый объект TypeInfo, представляющий родителя в начале списка типов и перемещая переменную parent в родительский класс этого объекта.

Когда parent поднялся на вершину иерархии наследования, цикл завершается. В этот момент программа использует другой цикл для добавления объектов TypeInfo в список типов в ListBox справа, отступы на два пробела больше, чем предыдущий элемент, чтобы подчеркнуть тот факт, что каждый элемент получен из одного выше.

В следующем коде показан класс TypeInfo, который используется для хранения информации о типах, отображаемых в элементах ListBox.

class TypeInfo
{
    public Type TheType;

    public TypeInfo(Type the_type)
    {
        TheType = the_type;
    }

    public override string ToString()
    {
        return TheType.Name;
    }
}

Этот класс просто содержит объект Type и переопределяет его метод ToString, чтобы вернуть это имя объекта. Элемент ListBox использует объект ToString для отображения объекта. Эта программа добавляет объекты TypeInfo в элементы управления ListBox, чтобы они отображали имена Type.

Источник: http://csharphelper.com/blog/2017/10/find-class-ancestors-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector