Ryu*_*Ryu 40 .net c# reflection reflection.emit
在我读过的所有书中,他们经常说,你想要动态生成IL的情况并不多,但他们没有给出任何有意义的例子.
在看到Reflection.Emit作为游戏公司的工作要求后,我很好奇其他地方正在使用它.
我现在想知道在现实世界中是否有任何情况,这是解决问题的最佳方法.也许它被用作设计模式的实现?
注意 我想PostSharp/AOP使用它.
Mar*_*ell 14
Expression.Compile
基本上这样做 - 这是一些 LINQ的关键.
我目前正在使用反射发射来重新编写序列化API - 因为有时反射不够好.碰巧这也会让它产生dll(就像sgen的工作原理一样),允许完全静态的代码(我希望这会让iPhone变得友好).
我还在HyperDescriptor中使用类似的方法来提供非常快速的基于名称的属性查找.
我也使用emit做以下事情:
所有都与SO问题有关.
最后,这种IL方法是protobuf-net"v2"的核心; 这里的原因是,它让我既拥有在运行时(通过IL上飞编译它)快速模型,并以同样的直接写静态编译的DLL,所以它可以作用于事物像iPhone,手机7等(缺少必要的元编程API).
我正在使用它作为一种动态创建动态代理来包装类的方法.NHibernate使用相同的模式来代理对POCO对象的调用,而不是查询数据库.
任何时候你想要能够动态地"编写代码"(即创建一个新的函数等),你需要Emit
.