Получить дерево наследования типа - PullRequest
13 голосов
/ 19 апреля 2011

Возможный дубликат:
Чтобы получить родительский класс с помощью Reflection на C #

Я пытаюсь найти простой способполучение дерева наследования определенного типа с использованием отражения в C #.

Допустим, у меня есть следующие классы:

public class A
{ }

public class B : A
{ }

public class C : B
{ }

Как использовать отражение для типа 'C', чтобы определить, чтоего суперкласс - «B», кто, в свою очередь, происходит от «A» и так далее?Я знаю, что могу использовать IsSubclassOf (), но давайте предположим, что я не знаю, какой суперкласс я ищу.

Ответы [ 2 ]

23 голосов
/ 19 апреля 2011

Чтобы получить непосредственного родителя типа, вы можете использовать свойство Type.BaseType. Вы можете итеративно вызывать BaseType, пока он не вернет null, чтобы пройти вверх по иерархии наследования типа.

Например:

public static IEnumerable<Type> GetInheritanceHierarchy
    (this Type type)
{
    for (var current = type; current != null; current = current.BaseType)
        yield return current;
}

Обратите внимание, что использование System.Object в качестве конечной точки недопустимо, поскольку не все типы (например, типы интерфейса) наследуются от него.

3 голосов
/ 19 апреля 2011

Объект типа System.Type имеет свойство с именем BaseType, которое возвращает «тип, от которого непосредственно наследуется текущий System.Type».Вы можете пройти по этой цепочке BaseType с, пока не получите null, и в этот момент вы знаете, что достигли System.Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...