如何创建/实例化'Type'对象

时间:2011-06-15 15:55:48

标签: c# .net reflection

我想迭代一个程序集中的类型,如果一个类型是指定接口的子类,我想创建一个该类型的对象并将其添加到一个列表中,如下所示:

var tasks = new List<IScheduledTask>();

foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
{
    if (t.IsSubclassOf(typeof(IScheduledTask)))
    {
        tasks.Add(new t());
    }
}

显然上面这个不起作用。你怎么能实现我的目标呢?

4 个答案:

答案 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)

使用Activator.CreateInstance方法:

ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);

答案 2 :(得分:1)

此前一个问题可能有所帮助 Instantiate an object with a runtime-determined type

它使用Activator.CreateInstance

答案 3 :(得分:1)

Activator.CreateInstance(t);

会做到这一点。

但要小心,要实现的类必须有一个公共构造函数,没有参数可以使它工作。