Это, скорее всего, будет легким ответом, и я просто что-то пропустил, но здесь идет... Если у меня есть тип (то есть фактический System.Type... не экземпляр), как это сделать Я скажу, наследует ли он от другого определенного базового типа?
Как определить, наследуется ли данный тип (System.Type) от определенного базового класса (в .Net)?
Ответ 1
Используйте IsSubclassOf метод System.Type class.
Ответ 2
РЕДАКТИРОВАТЬ: Обратите внимание, что вышеупомянутое решение не будет выполнено, если базовый тип, который вы ищете, является интерфейсом. Следующее решение будет работать для любого типа наследования, будь то класс или интерфейс.
// 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).
Ответ 3
Одна вещь, чтобы уточнить между 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