Como você determina se ou não um determinado (System.Type) herda Tipo de uma classe base específica (em .net)?

StackOverflow https://stackoverflow.com/questions/129277

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?

Foi útil?

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á retornar false 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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top