Liste todas as classes concretas ou abstratas de objeto
-
12-09-2019 - |
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:
- Tiger
- Cat
- Animal
- objeto
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