2010-05-12 16 views
1

我正在.net 3.5中查看Activator.CreateInstance的所有各種構造函數。我想創建一個類的實例,調用一個特定的構造函數。我沒有課程類型,只有它的名字。我有以下幾點,這是有效的,但實際上最先調用無參數構造函數,然後是我想要的。這不是什麼大問題,但無參數構造函數調用一個相當繁忙的基構造函數,而且我想調用的構造函數也是。Activator.CreateInstance具有類型名稱作爲字符串幷包含參數

換句話說,給定一個類型,使用參數調用CreateInstance很容易(只有下面的最後兩行),但只給出一個類型名稱,有沒有比這更好的方法?

ObjectHandle oh = Activator.CreateInstance("MyDllName", "MyNS." + "MyClassName"); 
object o = oh.Unwrap(); 
object newObj = Activator.CreateInstance(o.GetType(), new object[] { param1 }); 
return (IMyDesiredObject)newObject; 

謝謝!

回答

2

您可以使用這種CreateInstance的超負荷。它允許您通過名稱(字符串)以及構造函數參數(第6個參數)來指定類型。

+1

謝謝,裏德 - 我看到那個人,但我不知道如何處理ActivationAttributes和SecurityInfo。這些文檔沒有表明(和Binder和Culture一樣)它們可能是空的,但事實證明它們可以。適合我! – 2010-05-12 16:59:48

0

我能得到這個工作的方式是

Type type = BuildManager.GetType(ServiceRef + ".SDK",false); 

    Object nl = Activator.CreateInstance(type); 

BuildManager.GetType需要完全合格的類名,你的情況這是你會通過「myns名字。」 +「MyClassName」

相關問題