是否有一種方法可以使用字符串作爲類名來動態創建對象?Visual Basic:使用字符串作爲名稱動態創建對象
我已經離開VB好幾年了,但爲了解決另一種語言的問題,我不得不在這個開發包裝。我有一個工廠方法來動態創建並返回基於來自其他地方的輸入類型的對象。提供的輸入是要從中創建對象的類名。正常的語法意味着整個類必須明確拼寫出來。要做到這一點這種方式,可以從字面上有數百個,如果/然後是或案件處理中引用庫中的所有可用類/對象的選擇:
If c_name = "Button" then obj = new System.Windows.Forms.Button
If c_name = "Form" then obj = new System.Windows.Forms.Form
....
我希望,而不是減少所有這種情況下處理,以單行:IE瀏覽器...
my_class_name = "whateverclass"
obj = new System.Windows.Forms.my_class_name()
在PHP中,這是像這樣處理......
$my_class_name = "whateverclass";
$obj = new $my_class_name();
編輯:縱觀一些問題的答案,我覺得我在這裏過着我的頭。我還是設法得到它的工作使用Assembly類的this CreateInstance方法的變化,即使我更感興趣的是this variation giving more options,包括提供構造參數...
my_type_name = "System.Windows.Forms.Button"
asmb_name = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
button1 = Reflection.Assembly.Load(asmb_name).CreateInstance(my_type_name)
換句話說,它需要一個方法來做這個,而不是任何固有的語言語法? This Activator variation在使用完整的組合字符串和類路徑時也可以工作。我很可疑CreateInstance可能沒有完全的能力讓我把對象當作正常調用,例如obj = new System.Windows.Forms.Button
。這就是爲什麼我不能簡單地使用CreateObject
。如果沒有自然語言特徵允許您用類名替換字符串,那麼是否有人能夠洞察使用CreateInstance
可以預期哪些限制?
另外,是否有基本的Activator.CreateInstance(Unwrap之後)和Assembly.CreateInstance方法之間的區別?
不錯。 Form1_Load()'實際上將通過COM通過另一種語言處理。行o = Assembly.Load(ay).CreateInstance(fullyQualifiedClassName)'應該這樣做。 – 2010-08-09 04:27:53