2009-12-04 4 views
4

Возможно ли в C# посредством отражения или каким-либо другим способом вернуть список всех суперклассов (конкретных и абстрактных, в основном интересующихся конкретными классами) объекта. Так, например, проходящей в классе "Тайгер" вернется:Список всех конкретных или абстрактных классов объектов

  1. Тайгер
  2. Кошка
  3. животных
  4. Объект
+0

Рефлектор включает удобный узел «Базовые типы», который можно использовать для перехода к интерфейсам типа и базовым классам. –

ответ

10
static void VisitTypeHierarchy(Type type, Action<Type> action) { 
    if (type == null) return; 
    action(type); 
    VisitTypeHierarchy(type.BaseType, action); 
} 

Пример:

VisitTypeHierarchy(typeof(MyType), t => Console.WriteLine(t.Name)); 

Вы можете легко справиться с абстрактными классами, используя свойство Type.IsAbstract.

+0

+1 для краткости! – CesarGon

+0

Какой удивительно простой ответ, но только то, что я ищу. Благодаря! –

0

Конечно, используйте метод GetType() для получения типа предоставленного объекта. Каждый экземпляр типа имеет свойство «BaseType», которое предоставляет непосредственно унаследованный тип. Вы можете просто рекурсивно следовать этим типам, пока не найдете тип с нулевым BaseType (т.е. Object)

Смежные вопросы