2010-04-30 118 views

回答

23

不是直接的,但是您可以使用​​获取当前加载的所有程序集,然后使用Assembly.GetTypes()获取该程序集中的所有类型。然后使用Type.IsSubclassOf()来确定它是否是您之后类型的子类。

+0

谢谢。有用。 – Polaris 2010-04-30 08:16:32

+0

有没有办法只得到用户程序集(而不是系统程序集)?如果有一个选项可以获得这个程序集和所有引用(这个)程序集,这将是一个很好的解决方案。 – Shimmy 2012-01-13 08:15:20

+0

找到它:http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getreferencedassemblies.aspx – Shimmy 2012-01-13 08:16:03

4

您可以选择您要检查,获得与方法Assembly.GetTypes()并测试他们每个人的类型,大会如果是带Type.IsSubclassOf()

看到Assembly members一个子类,Type members

19

你可以这样做:

var subclassTypes = Assembly 
    .GetAssembly(typeof(BaseClass)) 
    .GetTypes() 
    .Where(t => t.IsSubclassOf(typeof(BaseClass))); 
3

试试这个代码:

public static IEnumerable<Type> GetAllSubclassOf(Type parent) 
{ 
    foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) 
     foreach (var t in a.GetTypes()) 
      if (t.IsSubclassOf(parent)) yield return t; 
}