代码之家  ›  专栏  ›  技术社区  ›  keparo

在程序集中搜索所有子类型?

  •  3
  • keparo  · 技术社区  · 16 年前

    我想查找从基/接口继承的所有类型。有人有好的方法吗?思想?

    我知道这是一个奇怪的要求,但这也是我一直在玩的东西。

    3 回复  |  直到 15 年前
        1
  •  11
  •   Jon Skeet    15 年前

    使用assembly.get types()获取所有类型,并使用type.isassignablefrom()检查继承。如果您需要代码,也请告诉我您是否在使用.NET 3.5。(像这样的许多反射任务使用Linq to对象更简单。)

    编辑:根据要求,这里有一个例子-它在 mscorlib 实现 IEnumerable . 请注意,当基类型是泛型时,生活会变得更加困难…

    using System;
    using System.Collections;
    using System.Linq;
    using System.Reflection;
    
    class Test
    {
        static void Main()
        {
            Assembly assembly = typeof(string).Assembly;
            Type target = typeof(IEnumerable);        
            var types = assembly.GetTypes()
                                .Where(type => target.IsAssignableFrom(type));
    
            foreach (Type type in types)
            {
                Console.WriteLine(type.Name);
            }
        }
    }
    
        2
  •  1
  •   Cristian Libardo    16 年前
    var a = Assembly.Load("My.Assembly");
    foreach (var t in a.GetTypes().Where(t => t is IMyInterface))
    {
        // there you have it
    }
    
        3
  •  0
  •   MartinH    15 年前

    或者对于基类的子类:

    var a = Assembly.Load("My.Assembly");
    foreach (var t in a.GetTypes().Where(t => t.IsSubClassOf(typeof(MyType)))
    {
        // there you have it
    }