De hecho, no podría escribir la última línea.
Pero probablemente no desee crear el objeto, solo por el bien o crearlo. Probablemente desee llamar a algún método en su instancia recién creada.
A continuación, tendrá algo así como una interfaz:
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) { }
}
y llama con:
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());
En cualquier caso, no se le estáticamente convertirse a un tipo que don' saber de antemano ("makeme" en este caso). ITask te permite llegar a tu tipo de objetivo.
Si esto no es lo que quieres, probablemente necesitarás ser un poco más específico en lo que estás tratando de lograr con esto.
¿Se requiere el backtick, es decir, si se omite, el compilador supone que es 1? – richard
Gracias por vincular el artículo de mi blog "Uso de Reflection para crear una instancia de una clase genérica en C# .Net" (http://omegacoder.com/?p=38) como el "Ejemplo simple". :-) Me alegra que el artículo encuentre una nueva vida. – OmegaMan
¿cómo puedo comparar el tipo genérico usando la palabra clave 'is'? –