我在实现某个接口的命名空间中有多个类,我想列出匹配相同接口的所有类。
有没有办法通过System.Reflection
达到目的?
public interface A
{}
public class AB : A
{}
public class AC : A
{}
public class AD : A
{}
List<A> classList = { AB, AC, AD};
感谢。
答案 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