2012-05-18 36 views
1

好的,我搜索了一下如何使用它的名字創建一個類的問題。我的問題並不完全相同,所以我會反問。關於使用類名創建類的編程建議

我的應用程序有2個類,比如說「A」和「B」。在另一個類中,我需要使用這兩個類(第三個類由外部服務調用)。外部服務只會將兩個「A」和「B」類的名稱作爲字符串傳遞給我。在第三節課中,我知道我可以做這樣的事情:

case "A": 
    create an instance of A 
case "B": 
    create an instance of B 

但這似乎很奇怪。我想動態地做到這一點,所以我正在考慮做Activator.CreateInstance,但不知道它是否是好的編程,因爲在遠程加載程序集時似乎使用了「CreateInstance」。就我而言,一切都在一個項目中。

有什麼建議嗎?非常感謝!

+7

'Activator.CreateInstance'既大量使用由框架,和高度優化。它的使用沒有任何問題。 –

+2

怪異的情況「A」:你提到的create instance [*]也被稱爲工廠設計模式(可能結構不如它應該是的,但你可以使用'switch/case') 。你可以在這裏閱讀這個模式:http://dofactory.com/Patterns/PatternAbstract.aspx和這裏:http://www.codeproject.com/Articles/68670/The-Factory-Pattern – MilkyWayJoe

+0

謝謝你的鏈接 –

回答

2

如果您希望通過自己的名字創建類數量是有限的(在你的例子如2類不同),我更願意用「開關」

public object ClassFactory(string ClassName) 
{ 
    switch(ClassName) 
    { 
     case "A": return new A(); 
     case "B": return new B(); 
    } 
} 

的方式,因爲它是速度更快並且更安全(如果班級名稱來自外部服務,想象會發生什麼,如果此服務發送惡意班級名稱)。

否則Activator.CreateInstance不應該有任何問題,但請確保您徹底驗證輸入。

+0

我認爲這會更快,但不夠優雅。我仍然是一名初級程序員,並試圖學習一些專家的良好技能。謝謝。 –