根据MSDN MethodRental Class允许更改动态模块的方法体。但由于其局限性,我无法想到它的实际用法。谷歌也没有帮助我。MethodRental Class的实际用法?
任何想法,什么类可以用于?
根据MSDN MethodRental Class允许更改动态模块的方法体。但由于其局限性,我无法想到它的实际用法。谷歌也没有帮助我。MethodRental Class的实际用法?
任何想法,什么类可以用于?
当与ICorProfilerInfo::SetILFunctionBody
配对时,这与ICorProfilerCallback::JITCompilationStarted
的精神类似,但有更多限制。 ICorProfiler*
类可用于为几乎任何托管方法执行运行时检测。有分析器和调试器使用这些来收集有关正在运行的进程的信息。
您可以使用MethodRental
来进行诊断目的的仪器代码。一些例子:
您还可以使用MethodRental
来增强现有代码的功能。想起Aspect-oriented programming。您可以将安全性,日志记录或其他横切设计问题“编织”到现有代码中。然而,这需要其他一些工具(XML,一个C#库)来表达你的方面。
最后,你可以使用MethodRental
为“弯路”现有的代码,即拦截方法调用,以创建一种运行时多态性。例如,如果您有使用一些动态生成的类RegistryStore
通过GetConfig
得到一些配置客户端的代码,你可以重写方法的IL改变RegistryStore.GetConfig
执行使用文件系统来代替。你可以做到这一点,而无需更改客户端代码。
不确定你的意思是什么限制。显然,这只能在MethodBuilder生成的动态生成的方法上运行。从装配中加载的IL编译JIT的类方法不能被替换。
用例将实现动态语言的运行时,该动态语言支持更改已定义类的方法(猴子修补)。像Ruby,Python,Javascript等的语言
您不能使用MethodRental for AOP,因为它只支持动态方法,对吗? – Giorgi 2010-05-27 10:57:43
@Giorgi:对不起,我的意思不是误导。您可以将它用于AOP,但您仍然会拥有'MethodRental'强加的相同约束:具体而言,您只能在动态方法/程序集上使用它。根据你想要做的事情,这可能根本没用。尽管我列出的所有用途都具有相同的基本约束。 – 2010-05-27 11:16:39
感谢您的回答。由于限制条件非常有限,这是因为我无法想到可能的用法。 – Giorgi 2010-05-27 11:46:55