Найти предков класса в 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.
