问题
Consider the following classes hierarchy: base class A, classes B and C inherited from A and class D inherited from B.
public class A {...}
public class B : A {...}
public class C : A {...}
public class D : B {...}
I can use following code to find all subclasses of A including D:
var baseType = typeof(A);
var assembly = typeof(A).Assembly;
var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
But I need to find only direct subclasses of A (B and C in example) and exclude all classes not directly inherited from A (such as D). Any idea how to do that?
回答1:
For each of those types, check if
type.BaseType == typeof(A)
Or, you can put it directly inline:
var types = assembly.GetTypes().Where(t => t.BaseType == typeof(baseType));
回答2:
Use Type.BaseType for that. From the documentation:
The base type is the type from which the current type directly inherits. Object is the only type that does not have a base type, therefore null is returned as the base type of Object.
回答3:
Just compare them appropriately:
var types = assembly.GetTypes().Where(t => t.BaseType == baseType);
来源:https://stackoverflow.com/questions/16038819/how-to-find-all-direct-subclasses-of-a-class-with-net-reflection