2011-04-19 10 views
8

Duplicar posibles:
To get parent class using Reflection on C#árbol de herencia de tipo

Estoy tratando de encontrar una manera fácil de conseguir el árbol de herencia de un tipo determinado utilizando la reflexión en C#.

Digamos que tengo las siguientes clases;

public class A 
{ } 

public class B : A 
{ } 

public class C : B 
{ } 

¿Cómo uso la reflexión sobre el tipo 'C' para determinar que su superclase es 'B', que a su vez proviene de 'A' y así sucesivamente? Sé que puedo usar 'IsSubclassOf()', pero supongamos que no sé la superclase que estoy buscando.

+3

Posible Dup: http://stackoverflow.com/questions/1524562/to-get-parent-class-using-reflection-on-c – Brook

+0

pregunta relacionada: http://stackoverflow.com/questions/5601486/how -to-test-si-dos-genéricos-tienen-una-base-subclase-relación-sin-instan –

+0

oh sí, esto es una tontería bien. Supongo que debería haber usado 'padre' en lugar de 'superclase –

Respuesta

18

Para obtener el padre inmediato de un tipo, puede usar la propiedad Type.BaseType. Puede llamar iterativamente al BaseType hasta que devuelva null para subir la jerarquía de herencia de un tipo.

Por ejemplo:

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

tenga en cuenta que no es válido utilizar System.Object como el punto final porque no todos los tipos (por ejemplo, tipos de interfaz) heredan de ella.

+0

¿Es posible caminar en la otra dirección? – rolls

3

Un objeto del tipo System.Type tiene una propiedad llamada BaseType que devuelve "el tipo del que hereda directamente el System.Type actual". Puede subir por esta cadena de BaseType s hasta obtener null, momento en el que sabe que ha llegado al System.Object.

Cuestiones relacionadas