您可以Type[] interfaces = typeof(MyClass).GetInterfaces();
获取类实现的所有内容的列表。
我想知道是否还有爬行“extends”树来查看一个类继承的所有基类型,即抽象类等。
答案 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();
}