Pergunta

É possível em C #, via reflexo ou algum outro método, para retornar uma lista todas as superclasses (concreto e abstrato, interessados ??principalmente em classes concretas) de um objeto. Por exemplo passando em uma classe "Tiger" retornaria:

  1. Tiger
  2. Cat
  3. Animal
  4. objeto
Foi útil?

Solução

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

Exemplo:

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

Você pode facilmente lidar com classes abstratas usando a propriedade Type.IsAbstract.

Outras dicas

Claro, usar o "GetType) (" método para obter o tipo do objeto fornecido. Cada instância Tipo tem uma propriedade " BaseType ", que fornece o tipo directamente herdado. Você pode apenas de forma recursiva siga os tipos até encontrar um tipo com um BaseType nula (ou seja, Object)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top