En effet, vous ne seriez pas en mesure d'écrire la dernière ligne.
Mais vous ne voulez probablement pas à créer l'objet, juste pour le plaisir ou le créer. Probablement, vous voulez appeler une méthode sur votre instance nouvellement créée.
Vous aurez alors besoin de quelque chose comme une interface :
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) { }
}
et de l'appeler avec :
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());
Dans tous les cas, vous ne serez pas statiquement en fonte pour un type que vous ne connaissez pas à l'avance ("makeme" dans ce cas). ITask vous permet de vous rendre à votre type de cible.
Si ce n'est pas ce que vous voulez, vous aurez probablement besoin d'être un peu plus précis dans ce que vous essayez d'atteindre avec cette.