2010-03-19 3 views
6

Я пытаюсь изучить содержимое сборки и найти в ней все классы, которые прямо или косвенно получены из Windows.Forms.UserControl.Получение всех типов из сборки, полученных из базового класса

Я делаю это:

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

Но это дает пустой список, потому что ни один из классов непосредственно не распространяется UserControl. Я недостаточно разбираюсь в размышлениях, чтобы сделать это быстро, и я бы предпочел не писать рекурсивную функцию, если мне это не нужно.

ответ

17

Вы должны использовать Type.IsSubclassOf это вместо:

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

То, что мне нужно. Благодарю. – captncraig

1

Вы можете использовать:

var assembly = Assembly.Load(filename); 
    var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type)); 
Смежные вопросы