Como você determina se ou não um determinado (System.Type) herda Tipo de uma classe base específica (em .net)?
-
02-07-2019 - |
Pergunta
Este é provavelmente vai ser uma resposta fácil e eu só estou faltando alguma coisa, mas aqui vai ... Se eu tenho um tipo, (isto é, um System.Type real ... não uma instância) como fazer I dizer se ele herda de outro tipo de base específica?
Solução
Use o método IsSubclassOf do System.Type classe.
Outras dicas
Uma coisa a esclarecer entre Type.IsSubTypeOf()
e Type.IsAssignableFrom()
:
-
IsSubType()
voltarátrue
somente se o tipo de dado é derivado do tipo especificado. Ele irá retornarfalse
se o tipo de dado é do tipo especificado. -
IsAssignableFrom()
voltarátrue
se o tipo de dado é tanto o tipo especificado ou derivado do tipo especificado.
Então, se você estiver usando-os para comparar BaseClass
e DerivedClass
(que herda de BaseClass
), então:
BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
EDIT: Note que a solução acima falhará se o tipo de base que você está procurando é uma interface. A seguinte solução irá trabalhar para qualquer tipo de herança, seja de classe ou interface.
// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
return baseType.IsAssignableFrom(type)
}
(Semi) extrato úteis a partir da MSDN Artigo:
true se [o argumento] e atual Type representam o mesmo tipo, ou se o tipo atual é na hierarquia de herança de [o argumento], ou se o atual Type é uma interface que [o argumento] implementos, ou Se [o argumento] é um parâmetro de tipo genérico e o atual Type representa um dos constrangimentos de [o argumento]. falso se nenhuma destas condições for verdadeira, ou se [o argumento] é uma referência nula (Nada no Visual Basic).