Quelque chose comme:
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
return assembly.GetTypes().Where(t => baseType.IsAssignableFrom(t));
}
Si vous avez besoin de gérer des génériques, cela devient un peu plus compliqué (par exemple en passant le List<>
type ouvert mais en espérant récupérer un type dérivé de List<int>
). Sinon c'est simple cependant :)
Si vous souhaitez exclure le type lui-même, vous pouvez le faire assez facilement:
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
return assembly.GetTypes().Where(t => t != baseType &&
baseType.IsAssignableFrom(t));
}
Notez que cela vous permettra également de spécifier une interface et de trouver tous les types qui l'implémentent, plutôt que de simplement travailler avec des classes comme le Type.IsSubclassOf
fait.
IsAssignableFrom
devrait également fonctionner. En particulier, ma version gère également les interfaces. Avez-vous testé mon code? Dans quel cas ma réponse échoue-t-elle?La méthode suivante obtiendra une collection de types qui héritent d'un type.
C #
VB.NET
Si vous devez inclure des types qui implémentent une interface, consultez la réponse de @Jon Skeet.
la source
Vous devez énumérer tous les types et vérifier pour chacun s'il hérite de celui que vous recherchez.
Certains codes comme celui de cette question peuvent vous être utiles.
la source
Pensez à utiliser cette méthode (écrite pour une PCL):
la source