I после использовал этот Linq-метод для получения всех типов, наследуемых от базового типа B:
var listOfBs = (from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in domainAssembly.GetTypes()
where typeof(B).IsAssignableFrom(assemblyType)
select assemblyType).ToArray();
EDIT: поскольку это все еще кажется более полным (таким образом, more views), позвольте мне добавить несколько подробностей:
domainAssembly.GetExportedTypes()
для извлечения только общедоступных типов (если это все, что вам нужно). Type.IsAssignable
также получит исходный (не производный) тип , (Type.IsSubclassOf
не будет, но Type.IsSubclassOf
не будет работать, если базовый тип является интерфейсом). && ! assemblyType.IsAbstract
. (Обратите внимание, что все интерфейсы считаются абстрактными, см. MSDN .)