Как проверить, наследует ли класс другой класс, не создавая его? - программирование

Как проверить, наследует ли класс другой класс, не создавая его?

Предположим, что у меня есть класс, который выглядит следующим образом:

class Derived : // some inheritance stuff here
{
}

Я хочу проверить что-то вроде этого в моем коде:

Derived is SomeType;

Но выглядит как оператор is. Требуется переменная типа Dervied, а не Derived. Я не хочу создавать объект типа Derived.
Как я могу убедиться, что Derived наследует SomeType без создания экземпляра?

P.S.. Если это помогает, мне нужно что-то вроде того, что ключевое слово where имеет с дженериками.
EDIT:
Как и этот, но он проверяет объект. Я хочу проверить сам класс.

4b9b3361

Ответ 1

Чтобы проверить назначение, вы можете использовать метод Type.IsAssignableFrom:

typeof(SomeType).IsAssignableFrom(typeof(Derived))

Это будет работать так, как вы ожидаете для отношений типа, отношений наследования и интерфейсов, но не тогда, когда вы ищете "назначаемость" для явных/неявных операторов преобразования.

Чтобы проверить строгое наследование, вы можете использовать Type.IsSubclassOf:

typeof(Derived).IsSubclassOf(typeof(SomeType))

Ответ 2

Попробуйте это

typeof(IFoo).IsAssignableFrom(typeof(BarClass));

Это скажет вам, реализует ли BarClass(Derived) IFoo(SomeType) или нет