2009-12-04 4 views
4

Est-il possible en C#, par réflexion ou autre, de renvoyer une liste de toutes les superclasses (concrètes et abstraites, principalement intéressées par des classes concrètes) d'un objet. Par exemple le passage dans une classe "Tiger" renverrait:Liste toutes les classes d'objets concrets ou abstraits

  1. Tiger
  2. Cat
  3. animaux
  4. objet
+0

Reflector inclut un nœud "Base Types" pratique que vous pouvez utiliser pour explorer les interfaces et les classes de base d'un type. –

Répondre

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

Exemple:

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

Vous pouvez facilement gérer les classes abstraites en utilisant la propriété Type.IsAbstract.

+0

+1 pour la concision! – CesarGon

+0

Quelle réponse étonnamment simple mais juste ce que je cherche. Merci! –

0

Bien sûr, utilisez la méthode "GetType()" pour obtenir le type de l'objet fourni. Chaque instance de type a une propriété "BaseType" qui fournit le type directement hérité. Vous pouvez suivre récursivement les types jusqu'à ce que vous trouviez un Type avec un BaseType nul (ie Object)

Questions connexes