確かに、最後の行を書くことはできません。
ただし、オブジェクトを作成するためだけに、オブジェクトを作成したくない場合もあります。新しく作成したインスタンスで何らかのメソッドを呼び出したいと思うかもしれません。
次に、インターフェースのようなものが必要になります。
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を使用すると、ターゲットタイプに到達できます。
これが希望どおりでない場合は、これを使用して達成しようとしていることをもう少し具体的にする必要があります。