Как проверить, наследует ли class другой class, не создавая его?
Предположим, у меня есть class, который выглядит так:
class Derived : // some inheritance stuff here { }
Я хочу проверить что-то подобное в моем коде:
Derived is SomeType;
Но выглядит так, как нужно оператору. Производится быть переменной типа Dervied, а не Derived. Я не хочу создавать объект типа Derived.
Как я могу убедиться, что Derived наследует SomeType
не SomeType
его?
- Что такое лямбды типа Scala и каковы их преимущества?
- Типы данных PostgreSQL и C #
- Как напечатать тип переменной в Rust?
- Сколько стоит слишком много с ключевым словом C ++ 11 auto?
- Почему эти уравнения деления приводят к нулю?
PS Если это помогает, я хочу что-то вроде того, что делает ключевое слово с дженериками.
РЕДАКТИРОВАТЬ:
Подобно этому ответу, но он проверяет объект. Я хочу проверить сам class.
- Почему streamи C ++ используют char вместо unsigned char?
- Какой тип данных использовать для hashированного поля пароля и какой длины?
- Любые гарантированные минимальные размеры для типов в C?
- Строка не была признана действительным DateTime "format dd / MM / yyyy"
- Есть ли 128-битное целое число в C ++?
- Что такое тип данных uintptr_t
- Что делает ключевое слово `forall` в Haskell / GHC?
- .NET. Определите тип этого «classа» в статическом методе
Чтобы проверить назначение, вы можете использовать метод Type.IsAssignableFrom
:
typeof(SomeType).IsAssignableFrom(typeof(Derived))
Это будет работать так, как вы ожидаете для отношений типа, отношений наследования и реализации интерфейса, но не тогда, когда вы ищете «назначаемость» для явных / неявных операторов преобразования.
Чтобы проверить строгое наследование, вы можете использовать Type.IsSubclassOf
:
typeof(Derived).IsSubclassOf(typeof(SomeType))
Попробуй это
typeof(IFoo).IsAssignableFrom(typeof(BarClass));
Это скажет вам, BarClass(Derived)
ли BarClass(Derived)
IFoo(SomeType)
или нет