Получение всех типов из сборки, производной от базового класса - PullRequest
6 голосов
/ 20 марта 2010

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

Я делаю это:

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

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

Ответы [ 2 ]

17 голосов
/ 20 марта 2010

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

var types = dll.GetTypes().Where(x => x.IsSubclassOf(typeof(UserControl)));
1 голос
/ 20 марта 2010

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

    var assembly = Assembly.Load(filename);
    var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...