Как я могу получить все унаследованные классы базового класса?

    class Foo { }

    class Foo1 : Foo { }

    class Foo2 : Foo { }

Как я могу получить все классы, которые используют Foo в качестве базового класса? Унаследованные классы не нужны в той же сборке.

Ответ 1

Это не быстро, но до тех пор, пока Foo является конкретным типом (а не интерфейсом), тогда он должен работать. Foo сам не возвращается этим кодом.

AppDomain.CurrentDomain.GetAssemblies()
                       .SelectMany(assembly => assembly.GetTypes())
                       .Where(type => type.IsSubclassOf(typeof(Foo)));