25

考虑以下类层次结构:基类 A、从 A 继承的类 B 和 C,以及从 B 继承的类 D。

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

我可以使用以下代码查找 A 的所有子类,包括 D:

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

但是我只需要找到 A 的直接子类(例如 B 和 C)并排除所有不直接从 A 继承的类(例如 D)。知道怎么做吗?

4

3 回答 3

31

对于每种类型,检查是否

type.BaseType == typeof(A)

或者,您可以将其直接内联:

var types = assembly.GetTypes().Where(t => t.BaseType == typeof(baseType));
于 2013-04-16T13:49:15.373 回答
5

为此使用Type.BaseType。从文档中:

基类型是当前类型直接继承的类型。Object 是唯一没有基类型的类型,因此 null 作为 Object 的基类型返回。

于 2013-04-16T13:50:06.250 回答
3

只需适当地比较它们:

var types = assembly.GetTypes().Where(t => t.BaseType == baseType);
于 2013-04-16T13:49:42.810 回答