2010-03-19 18 views
6

Estoy tratando de examinar el contenido de un ensamblado y encontrar todas las clases derivadas directa o indirectamente de Windows.Forms.UserControl.Obtener todos los tipos de un ensamblado derivado de una clase base

estoy haciendo esto:

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

Pero es dar una lista vacía, porque ninguna de las clases se extienden directamente control de usuario. No sé lo suficiente sobre la reflexión para hacerlo rápidamente, y prefiero no escribir una función recursiva si no es necesario.

Respuesta

17

Debe utilizar Type.IsSubclassOf esto en su lugar:

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

eso es lo que necesitaba. Gracias. – captncraig

1

Se puede utilizar:

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