Перечислите все конкретные или абстрактные классы объекта - PullRequest
4 голосов
/ 04 декабря 2009

Возможно ли в C # с помощью рефлексии или другого метода вернуть список всех суперклассов (конкретных и абстрактных, в основном заинтересованных в конкретных классах) объекта. Например, передача в класс "Tiger" вернет:

  1. Tiger
  2. Cat
  3. Animal
  4. Объект

Ответы [ 2 ]

10 голосов
/ 04 декабря 2009
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 голосов
/ 04 декабря 2009

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

...