根據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