MethodRental Class的实际用法?

Gio*_*rgi 12 .net reflection dynamic

根据MSDN MethodRental Class允许更改动态模块的方法体.但是由于它的局限性,我无法想到它的实际用法.谷歌也没有帮助我.

任何想法可以用于什么类?

Han*_*ant 6

不确定你的意思是什么.显然,这只适用于MethodBuilder生成的动态生成方法.从程序集加载的IL编译的JIT类方法无法替换.

用例将实现动态语言的运行时,该动态语言支持更改已定义类的方法(猴子修补).Ruby,Python,Javascript等语言


Chr*_*ich 6

这在精神上与ICorProfilerCallback::JITCompilationStarted配对时相似ICorProfilerInfo::SetILFunctionBody,但具有更多约束.这些ICorProfiler*类可用于为几乎任何托管方法执行运行时检测.有分析器和调试器使用它们来收集有关正在运行的进程的信息.

您可以使用MethodRental仪器代码进行诊断.一些例子:

  • 函数enter/exit将为您提供可用于从中派生分析数据的执行跟踪.
  • 检测同步原语可以帮助您诊断竞争条件.
  • 检测基本块可以帮助您确定代码覆盖率.

您还可以使用它MethodRental来增强现有代码的功能. 想到了面向方面的编程.您可以将安全性,日志记录或其他横切设计问题"编织"到现有代码中.但是,这需要一些其他工具(XML,C#库)来表达您的方面.

最后,您可以使用MethodRental"绕道"现有代码,即拦截方法调用来创建一种运行时多态.例如,如果您的客户端代码使用一些动态生成的类RegistryStore来获取某些配置GetConfig,则可以重写方法的IL以更改RegistryStore.GetConfig使用文件系统的实现.您无需更改客户端代码即可完成此操作.