Q
創建通過反射
6
A
回答
10
如果使用
Type barType = Type.GetType("Foo.Bar, whateverassembly");
Type actionType = typeof(Action<>).MakeGenericType(barType);
actionType
現在將代表Action<Foo.Bar>
。但是,要使用它,您需要持續使用反射,因此您需要找到符合簽名void(Foo.Bar)
的MethodInfo
,然後致電Delegate.CreateDelegate
來創建委託。你需要Delegate.DynamicInvoke
來執行它。
Delegate call = Delegate.CreateDelegate(actionType, ...);
...
call.DynamicInvoke(someBar);
個聲音告訴我,這不是你在想什麼......
3
在調用代碼中不能調用Action<Foo.Bar>
,因爲如果不在編譯時引用它,則無法訪問該類型定義。由於代表是逆向的,因此您可以返回Action<Object>
並使用它,或使用Action<IBar>
,其中IBar
接口在引用程序集中定義,並由Foo.Bar
實現。
如果這樣做返回一個Action<Object>
,你要麼有(如果使用C#4.0或dynamic
)使用經由反射Foo.Bar
構件或使用它投射到Foo.Bar
其中,鑄代碼具有該組件的引用,其中Foo.Bar
被定義。
+0
「你不能在你的調用代碼中把它叫做Action
相關問題
- 1. (Java)爲通過反射創建的新對象創建方法?
- 2. 通過反射
- 3. 通過反射
- 4. 通過反射
- 5. 通過反射
- 6. 通過反射
- 7. 通過反射
- 8. 通過反射
- 9. 通過反射
- 10. 通過反射
- 11. 創建反射
- 12. 通過反射動態創建通用列表時出錯
- 13. 通過反射和隱式轉換創建通用列表
- 14. ThrowException通過反射
- 15. 通過C#反射
- 16. .NET通過反射
- 17. 通過.NET反射
- 18. 創建由反射
- 19. 創建反射Opengl
- 20. 如何通過反射創建鋸齒陣列?
- 21. 通過反射創建泛型類的實例
- 22. 通過反射創建打開的實例代理
- 23. 如何通過Java反射動態創建Java類?
- 24. 如果通過使用反射創建對象,那麼獲取?
- 25. java Singleton - 通過反射防止多次創建
- 26. 在鑄造通過反射創建的類時遇到問題
- 27. 如何拋出通過反射創建的Exception類的實例?
- 28. 通過HasValue = false的反射可爲空創建
- 29. 通過在C#中反射創建匿名對象#
- 30. 當通過反射創建接口時將對象投射到對象
你什麼意思通過做「無參考第一集結號」?如果你想使用該程序集中的類型,那麼你需要以某種方式引用它。 – LukeH 2010-06-11 15:56:53
對不起,我的意思是沒有添加它作爲對Visual Studio項目的參考。即使用Assembly.LoadFrom()來加載它,以便不存在編譯時間依賴性。 – dss539 2010-06-11 15:59:13
@LukeH - 編輯的問題要清楚一點。感謝您的意見。 – dss539 2010-06-11 16:00:54