我正要通過對反射和泛型的一些文章,我碰到下面的代碼來:優勢Activator.CreateInstance的
public static T CreateControlInstance<T>(FormControl parent)
where T : FormControl
{
T control = GetControlInstance<T>(parent);
//do something with control
}
public static T GetControlInstance<T>(FormControl parent)
{
return (T)Activator.CreateInstance(typeof(T), new object[] { parent });
}
這些方法中使用這樣的:
MyButton b = CreateControlInstance<MyButton>(SomeformInstance);
許多控件是以這種方式創建的。我只想知道:
Q1。這種方法的優點是什麼?
Q2。考慮到對象實例類型在編譯時已知,這種方法的優點是什麼? (我假設的按鈕和FormControl
以某種方式與System.Windows.Forms.Control
)
編輯:
我發現這裏類似的事情正在做 Create instance of generic type?
基本上我想創建(已知類型的)類型從運行時讀取的字符串?
我想避免if-then-else根據字符串創建具體類型的對象的長列表..但沒有線索。
任何人都有更好的解決方案,以避免反射以創建已知類型的元素。
末編輯
您可以添加對文章的引用嗎? – 2011-02-03 11:47:12
這是一個人爲的例子。也不是很好的一個,命名的選擇是一個可怕的。 GetFooInstance不*建議創建* new * Foo。 – 2011-02-03 12:30:13