我想迭代一个程序集中的类型,如果一个类型是指定接口的子类,我想创建一个该类型的对象并将其添加到一个列表中,如下所示:
var tasks = new List<IScheduledTask>();
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
{
if (t.IsSubclassOf(typeof(IScheduledTask)))
{
tasks.Add(new t());
}
}
显然上面这个不起作用。你怎么能实现我的目标呢?
答案 0 :(得分:4)
Activator.CreateInstance
就是你所追求的。
var tasks = new List<IScheduledTask>();
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
{
if (t.IsSubclassOf(typeof(IScheduledTask)))
{
tasks.Add((IScheduledTask)Activator.CreateInstance(t));
}
}
答案 1 :(得分:2)
ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);
答案 2 :(得分:1)
此前一个问题可能有所帮助 Instantiate an object with a runtime-determined type
它使用Activator.CreateInstance
答案 3 :(得分:1)
Activator.CreateInstance(t);
会做到这一点。
但要小心,要实现的类必须有一个公共构造函数,没有参数可以使它工作。