事實上,你將無法寫出最後一行。
但你可能不希望創建對象,貪圖或創建它。你可能想在你新創建的實例上調用一些方法。
然後您就需要類似的接口:
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允許你達到你的目標類型。
如果這不是你想要的,你可能需要在你正在努力實現這個什麼更具體一點。
是否需要反引號,即是否忽略,編譯器是否假設它爲1? – richard 2011-03-03 07:01:06
感謝您將我的博客文章「使用反射實例化C#.Net中的泛型類」(http://omegacoder.com/?p=38)作爲「簡單示例」。 :-)我很高興這篇文章正在尋找新的生活。 – OmegaMan 2011-05-16 18:48:06
如何使用`is`關鍵字比較泛型? – 2013-04-04 13:18:36