我正在使用GetParameter來確定構造函數需要什麼參數。我可以得到他們的清單。現在我想調用ctor。如果沒有空的話,這可能嗎?如果沒有空的默認構造函數,可以使用relfection動態調用構造函數嗎?
回答
哪種語言? 對於c#你可以使用
Activator.CreateInstance(typeof(X), constructorparm1, constructorparam2...)
那我又回來了什麼?一個通用對象?我可以投射到我正在處理的類型? – topwik 2009-08-20 14:06:29
你找回一個對象。你必須投它或使用AS運算符來獲取對象作爲你想要的類型: X instance =(X)Activator.CreateInstance(typeof(X),constructorparm1,constructorparam2 ...) – saret 2009-08-20 14:23:07
我想這個問題我需要問的是如何從ParameterInfo創建系統類型? 我得到了我的ctor的參數列表。我回到paramInfo告訴我前兩個是布爾,第二個是整數。現在我需要創建一個數組,其中包含2個布爾,當然設置爲true或flase(基於來自UI或其他用戶的輸入),以及2個整數設置爲用戶從UI輸入或你有什麼... – topwik 2009-08-20 15:03:52
這是你在找什麼?這會創建一個SqlConnection實例,將字符串傳遞給構造函數。如果你想傳遞更多的值,只需將它們添加到數組中即可。
SqlConnection conn;
conn = (SqlConnection)System.Activator.CreateInstance(typeof(SqlConnection), new object[] { "Server=myserver" });
Console.WriteLine(conn.ConnectionString);
是的!但我的參數需要更加動態。我需要看構造函數,如果它有參數,我需要查看每個參數並獲取其系統類型,如布爾值或int,然後構建這些參數的數組,然後設置它們的值,然後將其傳遞給創建實例或ctor.invoke ... ParameterInfo [] pi = t.GetConstructors()[0] .GetParameters(); (p是布爾值){args [idx] = new布爾值(true); } } 我不知道。像這樣的東西。我不確定什麼可能。 } – topwik 2009-08-20 15:14:38
類型realType = Type.GetType(paramInfo.ParameterType.FullName);可能會訣竅。 – topwik 2009-08-20 15:18:19
忘掉這個。雖然可能有一些複雜的方法來做到這一點,但我會確保在我的程序集中聲明的每個類型都有一個默認的空構造函數,所以在獲取對象時我不必擔心這些參數。然後,它應該只是通過屬性並設置它們的值......希望這更容易。任何意見?任何人?如果它同樣困難,那麼我一定會看到另一個問題! – topwik 2009-08-20 17:48:00
- 1. 沒有適當的默認構造函數可用,儘管使用了默認的構造函數嗎?
- 2. 從參數化構造函數調用默認構造函數
- 3. 從另一個構造函數調用默認構造函數
- 4. 沒有適當的默認構造函數可用並且沒有默認的構造函數
- 5. 沒有默認的構造函數
- 6. 調用默認構造函數
- 7. 默認構造函數未調用
- 8. 默認構造函數調用
- 9. 默認構造函數從未調用
- 10. 默認構造函數不調用
- 11. 調用默認構造函數
- 12. 父構造函數默認調用?
- 13. 程序調用默認構造函數?
- 14. 調用默認構造函數
- 15. 沒有默認構造函數 - 繼承
- 16. 使用默認的構造函數
- 17. 默認構造函數
- 18. constexpr默認構造函數
- 19. C++,默認構造函數
- 20. 非默認構造函數
- 21. 構造函數可以在C++中調用另一個構造函數嗎?
- 22. 構造函數調用具有參數的構造函數
- 23. 爲成員變量自動調用默認構造函數嗎?
- 24. 申報空/默認構造函數
- 25. 默認構造函數與空括號
- 26. 錯誤C2512:沒有適當的默認構造函數可用
- 27. C++錯誤c2512:沒有默認的構造函數可用
- 28. android.widget.ProgressBar中沒有默認的構造函數可用
- 29. 沒有合適的默認構造函數可用?
- 30. 繼承:沒有適當的默認構造函數可用
什麼語言?我知道這在Java中是可以實現的,但也有許多其他語言支持這種類型的反射(比如C#)。 – Jonathan 2009-08-20 13:45:05
C#肯定。謝謝你們。我會嘗試一些。乾杯。 – topwik 2009-08-20 14:01:12