У меня есть сборка, содержащая типы, имеющие общий класс предков (определенный в сборке. В большинстве случаев общим предком является , а не непосредственный базовый тип класса.
Мне нужнобыть в состоянии отфильтровать из всех типов в этой сборке те, которые имеют этого общего предка. По разным причинам я не могу создать экземпляр типов (у них, как правило, нет общей сигнатуры конструктора), поэтому я должен начать с myAssembly.GetTypes()
и изучите свойства самих типов. Другими словами, я должен работать с классами, а не с экземплярами классов.
Как мне проверить каждый тип в этой коллекции, чтобы определить, наследуется ли он от желаемогообщий предок или нет?
Позже: не беспокойтесь, у меня это сейчас. Хитрость заключается в том, чтобы создать экземпляр объекта типа, являющегося типом предка из сборки , например
Type ancestor = assy.getType("myAncestorClassName", true, true);
Type[] interestingClasses = assy.GetTYypes().Where(t => t.IsSubclassOf(ancestor));
Однако это не будет работать:
Type[] interestingClasses = assy.GetTYypes().Where(t => t.IsSubclassOf(typeof(AncestorClass)));
, потому что, я думаю, тип предка определен в другой сборке, а не в основной.ssembly.
Много, намного позже .... Спасибо всем, кто предоставил ответы на этот вопрос.По пути меня отвлекли на что-то другое, но теперь у меня есть изящное решение (и я узнал что-то новое).