C#:如何获取子类的名称并使用泛型方法将它们放入集合中

时间:2014-08-15 08:40:24

标签: c# reflection

这是一个问题:

有一个父类Class01,它有两个子类:Subclass0101Subclass0102Class01及其子类尚未实例化。我们需要

  1. 枚举Class01
  2. 中的所有子类
  3. 将它们放入列表集合并输出该集合的内容。
  4. 使用父类的名称(如<Class1>左右)使尽可能多的通用 - 我不确定符号是否正确)。如果我们的Class02具有子类SubClass0201SubClass0202,那么这种方法将是通用的。
  5. 您是否会非常友好地帮助我们完成代码组合,因为我无法将现有答案组合到一个项目中?非常感谢你提前!!!

    以下是我的意图:

    namespace Temp
    {
        class Program
        {
            static void Main(string[] args)
            {
    
            // Not sure what to put here
            Show<Class01>
    
            // Not sure what to put here
            public static Show<T1>
            {
                // and here
            }
        }
    
        class Class01 {}
    
        class SubClass0101 : Class01 {}
    
        class SubClass0102 : Class01 { }
    
        class Class02 { }
    
        class SubClass0201 : Class02 { }
    
        class SubClass0202 : Class02 { }
    }
    

1 个答案:

答案 0 :(得分:1)

假设子类在同一个程序集中:

public static IEnumerable<Type> GetAllSubTypesInSameAssembly(this Type type)
{
    return type.Assembly
               .GetTypes()
               .Where(t => t != type && type.IsAssignableFrom(t));
}