如何找到一类与.NET反射直接子类(How to find all direct subclasse

2019-08-31 08:14发布

考虑下面的类层次结构:基类A,类B和C从A继承和类d从B.继承

public class A     {...}
public class B : A {...}
public class C : A {...}
public class D : B {...}

我可以使用下面的代码来找到一个包括d的子类:

var baseType = typeof(A);
var assembly = typeof(A).Assembly;
var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));

但我需要找到只A(例如,在B和C)直接子类和排除不直接从继承(如d)所有类。 任何想法如何做到这一点?

Answer 1:

对于每一个这些类型的,如果检查

type.BaseType == typeof(A)

或者,你可以把它直接内嵌:

var types = assembly.GetTypes().Where(t => t.BaseType == typeof(baseType));


Answer 2:

使用Type.BaseType了点。 从文档:

基类型是从当前类型直接继承的类型。 对象是不具有基本类型的唯一类型,因此返回null作为基础对象类型。



Answer 3:

只要适当地对它们进行比较:

var types = assembly.GetTypes().Where(t => t.BaseType == baseType);


文章来源: How to find all direct subclasses of a class with .NET Reflection