Ответ 1
Используйте IsSubclassOf метод System.Type class.
Это, скорее всего, будет легким ответом, и я просто что-то пропустил, но здесь идет... Если у меня есть тип (то есть фактический System.Type... не экземпляр), как это сделать Я скажу, наследует ли он от другого определенного базового типа?
Используйте IsSubclassOf метод System.Type class.
РЕДАКТИРОВАТЬ: Обратите внимание, что вышеупомянутое решение не будет выполнено, если базовый тип, который вы ищете, является интерфейсом. Следующее решение будет работать для любого типа наследования, будь то класс или интерфейс.
// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
return baseType.IsAssignableFrom(type)
}
(Полу) Полезный отрывок из статьи MSDN:
true, если [аргумент] и текущий тип представляют один и тот же тип, или если текущий тип находится в иерархии наследования [аргумент], или если текущий тип является интерфейсом, который реализуется [аргументом], или если [аргумент] является типичным параметром типа, а текущий тип представляет одно из ограничений [аргумент]. false, если ни одно из этих условий не является истинным, или если [аргумент] является пустой ссылкой (Nothing в Visual Basic).
Одна вещь, чтобы уточнить между Type.IsSubTypeOf()
и Type.IsAssignableFrom()
:
IsSubType()
вернет true
только в том случае, если данный тип получен из
указанный тип. Он вернет false
, если заданный тип IS
указанный тип.
IsAssignableFrom()
вернет true
, если данный тип либо
указанного типа или производного от указанного типа.
Итак, если вы используете их для сравнения BaseClass
и DerivedClass
(который наследуется от BaseClass
), то:
BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE