从使用System.Reflection实现特定接口的命名空间中获取所有类

时间:2013-12-07 11:08:45

标签: c# class interface namespaces

我在实现某个接口的命名空间中有多个类,我想列出匹配相同接口的所有类。

有没有办法通过System.Reflection达到目的?

public interface A
{}
public class AB : A
{}
public class AC : A
{}
public class AD : A
{}

List<A> classList = { AB, AC, AD};

感谢。

3 个答案:

答案 0 :(得分:1)

试试这个

            var interfaceType = typeof(A);
            var classes = AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(s => s.GetTypes())
                .Where(interfaceType.IsAssignableFrom).ToList();
            classes.Remove(typeof(A));

答案 1 :(得分:0)

是。您需要知道类型所在的程序集。然后从该程序集中获取类型,并找到实现您的接口的类型。

Assembly a = typeof(A).Assembly;
var list = a.GetTypes().Where(type => type != typeof(A) && typeof(A).IsAssignableFrom(type)).ToList();

答案 2 :(得分:-1)

是,有关详细信息,请参阅Type.implementsInterface。 http://msdn.microsoft.com/en-us/library/bb383789(v=vs.100).aspx

你也可以使用typeof(IWhateverable).IsAssignableFrom(myType)

此处提供更多信息: http://www.hanselman.com/blog/DoesATypeImplementAnInterface.aspx