Gio*_*rgi 12 .net reflection dynamic
根据MSDN MethodRental Class允许更改动态模块的方法体.但是由于它的局限性,我无法想到它的实际用法.谷歌也没有帮助我.
任何想法可以用于什么类?
不确定你的意思是什么.显然,这只适用于MethodBuilder生成的动态生成方法.从程序集加载的IL编译的JIT类方法无法替换.
用例将实现动态语言的运行时,该动态语言支持更改已定义类的方法(猴子修补).Ruby,Python,Javascript等语言
这在精神上与ICorProfilerCallback::JITCompilationStarted配对时相似ICorProfilerInfo::SetILFunctionBody,但具有更多约束.这些ICorProfiler*类可用于为几乎任何托管方法执行运行时检测.有分析器和调试器使用它们来收集有关正在运行的进程的信息.
您可以使用MethodRental仪器代码进行诊断.一些例子:
您还可以使用它MethodRental来增强现有代码的功能. 想到了面向方面的编程.您可以将安全性,日志记录或其他横切设计问题"编织"到现有代码中.但是,这需要一些其他工具(XML,C#库)来表达您的方面.
最后,您可以使用MethodRental"绕道"现有代码,即拦截方法调用来创建一种运行时多态.例如,如果您的客户端代码使用一些动态生成的类RegistryStore来获取某些配置GetConfig,则可以重写方法的IL以更改RegistryStore.GetConfig使用文件系统的实现.您无需更改客户端代码即可完成此操作.