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