.NET: получить все классы, полученные из определенного класса - PullRequest
4 голосов
/ 18 февраля 2011

У меня есть пользовательский элемент управления и несколько элементов управления, полученных из него.Мне нужно получить все классы в текущей сборке, которые являются производными от основного класса, и проверить их атрибуты.Как это сделать?

Ответы [ 3 ]

12 голосов
/ 18 февраля 2011
var type = typeof(MainClass);

var listOfDerivedClasses = Assembly.GetExecutingAssembly()
    .GetTypes()
    .Where(x => x.IsSubclassOf(type))
    .ToList();

foreach (var derived in listOfDerivedClasses)
{
   var attributes = derived.GetCustomAttributes(typeof(TheAttribute), true);

   // etc.
}
1 голос
/ 18 февраля 2011

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

Type baseType = ...
var descendantTypes =
    from type in baseType.Assembly.GetTypes()
    where !type.IsAbstract
       && type.IsSubclassOf(baseType)
       && type.IsDefined(typeof(TheCustomAttributeYouRequire), true)
    select type;

Вы можете перейти оттуда.

0 голосов
/ 11 февраля 2015

Чтобы найти производные класса, которые все были определены в другой сборке (GetExecutingAssembly не работала), я использовал:

var asm = Assembly.GetAssembly(typeof(MyClass));
var listOfClasses = asm.GetTypes().Where(x => x.IsSubclassOf(typeof(MyClass)));

(разделить на 2 строки для сохранения прокрутки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...