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

Могу ли я получить все его подклассы с помощью отражения или другими способами?

Для объекта можно получить все его подклассы с помощью отражения?

4b9b3361

Ответ 1

Вы можете загружать все типы в сборку, а затем перечислять их, чтобы увидеть, какие из них реализуют тип вашего объекта. Вы сказали "объект", поэтому приведенный ниже пример кода не для интерфейсов. Кроме того, этот образец кода ищет только ту же сборку, что и объект, объявленный в.

class A
{}
...
typeof(A).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(A)));

Или, как предложено в комментариях, используйте этот образец кода для поиска по всем загруженным сборкам.

var subclasses =
from assembly in AppDomain.CurrentDomain.GetAssemblies()
    from type in assembly.GetTypes()
    where type.IsSubclassOf(typeof(A))
    select type

Оба образца кода требуют, чтобы вы добавили using System.Linq;

Ответ 2

Подклассы означают интерфейсы? Да:

this.GetType().GetInterfaces()

Подклассы означают базовые типы? Ну, С# может иметь только один базовый класс

Подклассы означают все классы, которые наследуются от вашего класса? Да:

EDIT: (спасибо vcsjones)

foreach(var asm in AppDomain.CurrentDomain.GetAssemblies())
{
        foreach (var type in asm.GetTypes())
        {
            if (type.BaseType == this.GetType())
                yield return type;
        }
}

И сделайте это для всех загруженных сборок