Найти предков класса в C#
Пример Найти классы, реализующие интерфейс или являющиеся потомками данного класса в C# , показывает, как найти список классов, которые являются потомками класса или интерфейса. В этом примере используется аналогичный код для списка классов. Затем, если вы нажмете на класс в списке слева, программа использует следующий код для отображения предков класса для выбранного класса в списке справа.
// Отображение предков выбранного класса. private void lstClasses_SelectedIndexChanged(object sender, EventArgs e) { lstAncestors.Items.Clear(); if (lstClasses.SelectedIndex == -1) return; Cursor = Cursors.WaitCursor; Refresh(); // Получить тип. Listtypes = 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.