C# 如何创建/实例化';类型';
我想遍历程序集中的类型,如果类型是指定接口的子类,我想创建该类型的对象并将其添加到如下列表中:C# 如何创建/实例化';类型';,c#,.net,reflection,C#,.net,Reflection,我想遍历程序集中的类型,如果类型是指定接口的子类,我想创建该类型的对象并将其添加到如下列表中: var tasks = new List<IScheduledTask>(); foreach (Type t in Assembly.GetExecutingAssembly().GetTypes()) { if (t.IsSubclassOf(typeof(IScheduledTask))) { tasks.Add(new t()); } }
var tasks = new List<IScheduledTask>();
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
{
if (t.IsSubclassOf(typeof(IScheduledTask)))
{
tasks.Add(new t());
}
}
var tasks=newlist();
foreach(在Assembly.getExecutionGassembly().GetTypes()中键入t)
{
if(t.IsSubclassOf(typeof(IScheduledTask)))
{
添加(新的t());
}
}
显然,上述方法不起作用。你如何才能实现我所追求的目标?激活器。CreateInstance是你所追求的
var tasks = new List<IScheduledTask>();
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
{
if (t.IsSubclassOf(typeof(IScheduledTask)))
{
tasks.Add((IScheduledTask)Activator.CreateInstance(t));
}
}
var tasks=newlist();
foreach(在Assembly.getExecutionGassembly().GetTypes()中键入t)
{
if(t.IsSubclassOf(typeof(IScheduledTask)))
{
添加((isScheduledTask)Activator.CreateInstance(t));
}
}
前面的问题可能会有所帮助
它使用Activator.CreateInstance
查看使用方法:
我会成功的
但是要小心,要实例化的类必须有一个没有参数的公共构造函数才能工作。这将创建一个
Object
类型的对象列表,不是吗?不,该对象将是T类型的,您只需要强制转换它。@abe miessler强制转换它:tasks.Add((isscheduledtask)Activator.CreateInstance(T))代码>啊,我想他想创建一个从接口继承的类的实例。如果他想这么做,可能吗?@Abe Miessler,这就是CreateInstance
正在做的事情。指定给它的类型是实现类型,而不是接口类型本身。您可以强制转换为IScheduledTask
,因为您必须这样才能将其列入列表。
ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);
Activator.CreateInstance(t);