Как проверить, наследует ли класс другой класс, не создавая его?
Предположим, что у меня есть класс, который выглядит следующим образом:
class Derived : // some inheritance stuff here
{
}
Я хочу проверить что-то вроде этого в моем коде:
Derived is SomeType;
Но выглядит как оператор is
. Требуется переменная типа Dervied, а не Derived.
Я не хочу создавать объект типа Derived.
Как я могу убедиться, что Derived наследует SomeType
без создания экземпляра?
P.S.. Если это помогает, мне нужно что-то вроде того, что ключевое слово where
имеет с дженериками.
EDIT:
Как и этот, но он проверяет объект. Я хочу проверить сам класс.
Ответы
Ответ 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)
или нет