Algo como:
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
return assembly.GetTypes().Where(t => baseType.IsAssignableFrom(t));
}
Si necesita manejar genéricos, eso se vuelve algo más complicado (por ejemplo, pasar el List<>
tipo abierto pero esperar obtener un tipo derivado de List<int>
). De lo contrario, es simple aunque :)
Si desea excluir el tipo en sí, puede hacerlo con bastante facilidad:
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
return assembly.GetTypes().Where(t => t != baseType &&
baseType.IsAssignableFrom(t));
}
Tenga en cuenta que esto también le permitirá especificar una interfaz y encontrar todos los tipos que la implementan, en lugar de simplemente trabajar con clases como lo Type.IsSubclassOf
hace.
IsAssignableFrom
debería funcionar también. En particular, mi versión también se adapta a las interfaces. ¿Probaste mi código? ¿En qué caso falla mi respuesta?El siguiente método obtendrá una colección de tipos que heredan un tipo.
C#
VB.NET
Si necesita incluir tipos que implementan una interfaz, consulte la respuesta de @Jon Skeet.
fuente
Tienes que enumerar todos los tipos y comprobar cada uno si hereda el que estás buscando.
Algún código como el de esta pregunta puede resultarle útil.
fuente
Considere usar este método (escrito para una PCL):
fuente