Спустя немного времени - нашёл такое решение
public static IEnumerable<Type> GetInterfaceTypes<T>()
{
var type = typeof(T);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
return types;
}
Если вы простой обыватель и отчаянно ищите способа быстрее решить проблему, то вот пример использования:
interface ITest1
{
}
interface ITest2 : ITest1
{
}
interface ITest3 : ITest2
{
}
class TestClass1
{
}
class TestClass2 : TestClass1
{
}
static class Extensions
{
public static IEnumerable<Type> GetInheritedTypes<T>()
{
var type = typeof(T);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
return types;
}
}
class Prog
{
public static void Main()
{
foreach (var i in Extensions.GetInheritedTypes<TestClass1>()) //В треугольных скобочках указывается тип, наледников которого вы хотите получить
Console.WriteLine(i);
}
}