如何获得类扩展的所有类的Type []

时间:2010-04-01 09:46:26

标签: c# .net

您可以Type[] interfaces = typeof(MyClass).GetInterfaces();获取类实现的所有内容的列表。

我想知道是否还有爬行“extends”树来查看一个类继承的所有基类型,即抽象类等。

2 个答案:

答案 0 :(得分:3)

您可以使用Type.BaseType从顶级类型遍历到最基本类型,直到基类型达到object

这样的事情:

abstract class A { }
class B : A { }
class C : B { }

public static void Main(string[] args)
{
    var target = typeof(C);

    var baseTypeNames = GetBaseTypes(target).Select(t => t.Name).ToArray();

    Console.WriteLine(String.Join(" : ", baseTypeNames));
}

private static IEnumerable<Type> GetBaseTypes(Type target)
{
    do
    {
        yield return target.BaseType;

        target = target.BaseType;
    } while (target != typeof(object));
}

答案 1 :(得分:0)

我使用此代码来获取继承已定义Type的所有类。它搜索所有已加载的程序集。如果您只有Baseclass,则会有用,并且您将获得所有扩展基类的类。

Type[] GetTypes(Type itemType) {
    List<Type> tList = new List<Type>();
    Assembly[] appAssemblies = AppDomain.CurrentDomain.GetAssemblies();
    foreach (Assembly a in appAssemblies) {
        Module[] mod = a.GetModules();
        foreach (Module m in mod) {
            Type[] types = m.GetTypes();
            foreach (Type t in types) {
                try {
                    if (t == itemType || t.IsSubclassOf(itemType)) {
                        tList.Add(t);
                    }
                }
                catch (NullReferenceException) { }
            }
        }
    }
    return tList.ToArray();
}