c# - polimorfismo - ¿Cómo se determina si un determinado tipo(System.Type) hereda de una clase base específica(en.Net)?
polimorfismo parametrico c# (3)
EDITAR: tenga en cuenta que la solución anterior fallará si el tipo de 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 artículo de MSDN :
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).
Probablemente esta sea una respuesta fácil y me falta algo, pero aquí va ... Si tengo un Tipo (es decir, un Tipo de Sistema real ... no una instancia) ¿cómo puedo decir si hereda de otro tipo base específico?
Utilice el método IsSubclassOf de la clase System.Type .
Una cosa para aclarar entre Type.IsSubTypeOf()
y Type.IsAssignableFrom()
:
IsSubType()
devolverátrue
solo si el tipo dado se deriva del tipo especificado. Devolveráfalse
si el tipo dado ES el tipo especificado.IsAssignableFrom()
devolverátrue
si el tipo dado es el tipo especificado o derivado del tipo especificado.
Entonces, si los usa 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