¿Cómo se determina si un tipo determinado (System.Type) hereda o no de una clase base específica (en .Net)?

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

Pregunta

Es probable que sea una respuesta fácil y solo me falta algo, pero aquí va ... Si tengo un Tipo, (es decir, un System.Type real ... no una instancia), ¿cómo ¿Le digo si hereda de otro tipo base específico?

¿Fue útil?

Otros consejos

Una cosa para aclarar entre Type.IsSubTypeOf () y Type.IsAssignableFrom () :

  • IsSubType () devolverá true solo si el tipo dado se deriva de El tipo especificado. Devolverá false si el tipo dado IS el tipo especificado.

  • IsAssignableFrom () devolverá true si el tipo dado es tipo especificado o derivado del tipo especificado.

Entonces, si está utilizando estos para comparar BaseClass y DerivedClass (que hereda de BaseClass ), entonces:

BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

EDITAR: tenga en cuenta que la solución anterior fallará si el tipo base que está buscando es una interfaz. La siguiente solución funcionará para cualquier tipo de herencia, ya sea clase o interfaz.

// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
    return baseType.IsAssignableFrom(type)
}

(Semi) Extracto útil del MSDN artículo:

verdadero si [el argumento] y el Tipo actual representan el mismo tipo, o si el Tipo actual está en la jerarquía de herencia de [el argumento], o si el Tipo actual es una interfaz que [el argumento] implementa, o si [el argumento] es un parámetro de tipo genérico y el tipo actual representa una de las restricciones de [el argumento]. falso si ninguna de estas condiciones es verdadera o si [el argumento] es una referencia nula (Nothing en Visual Basic).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top