Obtention de tous les types d’un assemblage dérivé d’une classe de base

J’essaie d’examiner le contenu d’un assemblage et de trouver toutes les classes qui le proviennent directement ou indirectement de Windows.Forms.UserControl.

Je fais ça:

Assembly dll = Assembly.LoadFrom(filename); var types = dll.GetTypes().Where(x => x.BaseType == typeof(UserControl)); 

Mais cela donne une liste vide car aucune des classes n’étend directement directement UserControl. Je ne connais pas suffisamment la reflection pour le faire rapidement et je préférerais ne pas écrire de fonction récursive si je ne suis pas obligé de le faire.

Vous devez utiliser Type.IsSubclassOf place:

 var types = dll.GetTypes().Where(x => x.IsSubclassOf(typeof(UserControl))); 

Vous pouvez utiliser :

  var assembly = Assembly.Load(filename); var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type));