Подтвердить что ты не робот

Как найти все прямые подклассы класса с .NET Reflection

Рассмотрим следующую иерархию классов: базовый класс A, классы B и C, наследуемые от A и класса D, унаследованные от B.

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). Любая идея, как это сделать?

4b9b3361

Ответ 1

Для каждого из этих типов убедитесь, что

type.BaseType == typeof(A)

Или вы можете поместить его прямо в строку:

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

Ответ 2

Используйте Type.BaseType. Из документации:

Базовый тип - это тип, из которого непосредственно наследуется текущий тип. Объект - это единственный тип, который не имеет базового типа, поэтому null является базовым типом объекта.

Ответ 3

Просто сравните их соответствующим образом:

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