2009-08-20 89 views
1

我正在使用GetParameter來確定構造函數需要什麼參數。我可以得到他們的清單。現在我想調用ctor。如果沒有空的話,這可能嗎?如果沒有空的默認構造函數,可以使用relfection動態調用構造函數嗎?

+2

什麼語言?我知道這在Java中是可以實現的,但也有許多其他語言支持這種類型的反射(比如C#)。 – Jonathan 2009-08-20 13:45:05

+0

C#肯定。謝謝你們。我會嘗試一些。乾杯。 – topwik 2009-08-20 14:01:12

回答

3

哪種語言? 對於c#你可以使用

Activator.CreateInstance(typeof(X), constructorparm1, constructorparam2...) 
+0

那我又回來了什麼?一個通用對象?我可以投射到我正在處理的類型? – topwik 2009-08-20 14:06:29

+0

你找回一個對象。你必須投它或使用AS運算符來獲取對象作爲你想要的類型: X instance =(X)Activator.CreateInstance(typeof(X),constructorparm1,constructorparam2 ...) – saret 2009-08-20 14:23:07

+0

我想這個問題我需要問的是如何從ParameterInfo創建系統類型? 我得到了我的ctor的參數列表。我回到paramInfo告訴我前兩個是布爾,第二個是整數。現在我需要創建一個數組,其中包含2個布爾,當然設置爲true或flase(基於來自UI或其他用戶的輸入),以及2個整數設置爲用戶從UI輸入或你有什麼... – topwik 2009-08-20 15:03:52

1

這是你在找什麼?這會創建一個SqlConnection實例,將字符串傳遞給構造函數。如果你想傳遞更多的值,只需將它們添加到數組中即可。

 SqlConnection conn; 
     conn = (SqlConnection)System.Activator.CreateInstance(typeof(SqlConnection), new object[] { "Server=myserver" }); 
     Console.WriteLine(conn.ConnectionString); 
+0

是的!但我的參數需要更加動態。我需要看構造函數,如果它有參數,我需要查看每個參數並獲取其系統類型,如布爾值或int,然後構建這些參數的數組,然後設置它們的值,然後將其傳遞給創建實例或ctor.invoke ... ParameterInfo [] pi = t.GetConstructors()[0] .GetParameters(); (p是布爾值){args [idx] = new布爾值(true); } } 我不知道。像這樣的東西。我不確定什麼可能。 } – topwik 2009-08-20 15:14:38

+0

類型realType = Type.GetType(paramInfo.ParameterType.FullName);可能會訣竅。 – topwik 2009-08-20 15:18:19

+0

忘掉這個。雖然可能有一些複雜的方法來做到這一點,但我會確保在我的程序集中聲明的每個類型都有一個默認的空構造函數,所以在獲取對象時我不必擔心這些參數。然後,它應該只是通過屬性並設置它們的值......希望這更容易。任何意見?任何人?如果它同樣困難,那麼我一定會看到另一個問題! – topwik 2009-08-20 17:48:00