事实上,你将无法写出最后一行。
但是您可能不想创建对象,只是为了或创建它。您可能想在新创建的实例上调用一些方法。
然后,您将需要类似接口的东西:
public interface ITask
{
void Process(object o);
}
public class Task<T> : ITask
{
void ITask.Process(object o)
{
if(o is T) // Just to be sure, and maybe throw an exception
Process(o as T);
}
public void Process(T o) { }
}
并调用它:
Type d1 = Type.GetType("TaskA"); //or "TaskB"
Type[] typeArgs = { typeof(Item) };
Type makeme = d1.MakeGenericType(typeArgs);
ITask task = Activator.CreateInstance(makeme) as ITask;
// This can be Item, or any type derived from Item
task.Process(new Item());
在任何情况下,您都不会被静态转换为您事先不知道的类型(在本例中为“makeme”)。ITask 允许您访问您的目标类型。
如果这不是您想要的,您可能需要更具体地说明您要通过此实现的目标。