我是一個PHP程序員一段時間。前兩天,我去了一個求職面試,他們給了我一個ASP.NET(C#)的分配。我真的很想脫離php的勢力範圍,並學習一種體面的語言來挑戰我。所以,我有一個問題C# - 對象創建
是否所有實例都必須在運行時實例化?在PHP中,我可以做這樣的事情......
class SomeObject {}
$objString = "SomeObject";
$objInstance = new $objString();
我不能這樣做,在C#中,大概怎麼一回事,因爲它是一個編譯語言。在C#中,我需要創建一個工廠模式來實例化對象。這也意味着,如果我必須在該工廠中實例化10個對象,那麼將會有10個if
陳述是醜陋的。
我發現Activator對象的方法是Activator::createInstance()
,但我無法讓它工作。也有反思,但這兩個(如我所知)是一個性能影響。所以,有沒有辦法動態創建對象,或者它可能是在C#中,我可以立即創建我的程序將使用的所有對象,這真的很誘人?
編輯
好了,讓我們說,我有一個在5個不同的occassions使用5對象。我運行程序,程序評估它需要這些對象之一併實例化它。其他四個從未實例化。我關閉了該程序。
第二次,我用不同的參數運行程序,其中兩個5個對象被創建,其他三個從未存在。
這在PHP中很容易。讓我們把Activator和其他工具放在一邊,當我知道可能只有其中一個會被使用時,在C#世界中創建所有5個對象是否是一個好習慣?
我不知道PHP,但在C#中,您可以創建一個對象並同時進行初始化。你不需要使用工廠或Activator對象 - 只需要'SomeObject someObj = new SomeObject();'就可以。 – Tim 2014-10-30 07:42:34
在.NET中動態構建對象是可能的,但您應該瞭解整個語言,運行時,平臺,而不僅僅是語法。我的意思是,如果您嘗試像在C#中使用PHP那樣繼續編程,那麼您將會遇到一個非常糟糕的體驗。 – 2014-10-30 07:52:17
「是否所有實例都必須在運行時實例化?」。那麼不,我的意思是,如果你的意思是它們沒有實例化編譯時或咖啡時間......但是你沒有實例化它們中的任何一個。 (如果你不想,你肯定不需要使用反射)。 – atlaste 2014-10-30 07:54:47