2016-07-30 2 views
0

Из-за незнания с System.Reflection Я хотел бы знать, есть ли способ вернуть классы в проекте, которые наследуются от определенного пользовательского класса.System.Reflection => Поиск пользовательских классов

пользовательского классаПросто класс образец

public class Parent 
{ 
    public Parent() { } 
} 

Наследственные КлассыОпять только образец набор классов

public class ParentA : Parent 
{ 
    /*code*/ 
} 

public class Something 
{ 
    /*code*/ 
} 

public class SneakyParent : Parent 
{ 
    /*code*/ 
} 

System.Reflection код Я ПыталсяThi s в настоящее время пишет в консольном приложении, но в конечном счете, будет выводиться в массив или список

class Program 
{ 
    static void Main(string[] args) 
    { 
     Assembly assem = typeof(Parent).Assembly; 
     foreach (var type in assem.GetTypes()) 
     { 
      Console.WriteLine($"Parent \"{type.Name}\" found!"); 
     } 
     Console.ReadLine(); 
    } 
} 

После запуска кода это выход, я получаю:

Parent "Parent" found! 
Parent "Program" found! 
Parent "ParentA" found! 
Parent "Something" found! 
Parent "SneakyParent" found! 

С несколько более «Хм. .. Интересно, «попытки я все еще не могу понять, как вернуть правильный ввод и тем не менее, как вернуть классы. В идеале я хотел бы, чтобы выход был ...

Parent "Parent A" found! 
Parent "SneakyParent" found! 

... а также вернуть эти классы в список или массив.

+0

Вы хотите использовать [Type.IsSubclassOf] (https://msdn.microsoft.com/en-us/library/system.type.issubclassof (V = vs.110) .aspx) метод. –

+0

Это решило проблему поиска правильных классов! Большое спасибо Майклу Лю! –

ответ

0
Assembly assem = typeof(Parent).Assembly; 
foreach (var type in assem.GetTypes().Where(x => x.IsSubclassOf(typeof(Parent)))) 
{ 
    Console.WriteLine($"Parent \"{type.Name}\" found!"); 
} 
Console.ReadLine(); 
+0

Спасибо! Я буду отмечать как ответ, когда я доберусь туда, куда иду! –

Смежные вопросы