我正在编写一个将由许多类实现的接口(interface),并且我正在编写一个将保存这些实现的实例集合的类。每个类都有一个默认的构造函数。
那么,是否有一种简单的方法(例如使用某种反射)将每个实现类的实例放入集合中?除了手动执行之外,这很简单,是的,但是工作量很大并且容易出错(如果我在编写方法时错过了一个实现怎么办?如果出现新的实现而我忘记更新给定的方法怎么办?)。
所以,我想要的是能够迭代给定命名空间的所有类,或者可能遍历所有可用类的列表。然后,我的方法将通过反射简单地检查给定的类是否实现了给定的接口(interface),如果实现了,则将其放入集合中。
谢谢。
最佳答案
您需要调用Assembly.GetTypes()
来获取程序集中的每个类,调用typeof(IMyInterface).IsAssignableFrom
来检查实现该接口(interface)的类,然后调用 Activator.CreateInstanse 来实例化该类。
使用 LINQ:
typeof(IMyInterface).Assembly.GetTypes()
.Where<Type, bool>(typeof(IMyInterface).IsAssignableFrom)
.Select(t => Activator.CreateInstance(typeof(T)))
.ToArray()
关于c# - 动态访问给定命名空间的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890443/