qué polimorfismo polimorfico parametrico form derivada clase abstracta c# .net reflection inheritance

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?



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