Trouver tous les types parents (à la fois les classes de base et les interfaces)
Je veux être en mesure de trouver tous les parents de types (classes de base et des interfaces) pour un type spécifique.
Par exemple si j'ai
class A : B, C { }
class B : D { }
interface C : E { }
class D { }
interface E { }
je veux voir qu'Une est B, C, D et E et de l'Objet
Quel est le meilleur moyen pour ce faire? est-il une méthode de réflexion pour ce faire ou dois-je le faire moi-même quelque chose.
====EDIT====
Donc quelque chose comme cela?
public static IEnumerable<Type> ParentTypes(this Type type)
{
foreach (Type i in type.GetInterfaces())
{
yield return i;
foreach (Type t in i.ParentTypes())
{
yield return t;
}
}
if (type.BaseType != null)
{
yield return type.BaseType;
foreach (Type b in type.BaseType.ParentTypes())
{
yield return b;
}
}
}
J'ai été un peu en espérant que je n'ai pas eu à le faire moi-même mais bon.
source d'informationauteur Luke McGregor | 2012-01-15
Vous devez vous connecter pour publier un commentaire.
Plus de solution générale:
Ou à réellement obtenir tous les parents de types:
Pour obtenir les interfaces implémentées par un type, l'utilisation
Type.GetInterfaces
. À voir de sa de classe de la hiérarchie, vous pouvez utiliserType.BaseType
de manière itérative jusqu'à ce que vous frappez unenull
de référence (généralement ce qui se passera après vous frappezSystem.Object
mais pas nécessairement - par exemple, une interface de type de type de base sera directementnull
).Un C# méthode d'extension pour les paresseux:
Pour les interfaces,
typeof(A).GetInterfaces()
(documentée ici: http://msdn.microsoft.com/en-us/library/system.type.getinterfaces.aspx).Pour la classe de base,
typeof(A).BaseType
(documentée ici: http://msdn.microsoft.com/en-us/library/system.type.basetype.aspx).Appeler récursivement, laver, rincer, répéter.