我想學習CIL代碼,但不能去除和如何返回一個函數的值作爲參數傳遞給另一個函數。對於下面的函數參數如何在CIL函數調用中傳遞?
我已經生成的CIL代碼:
public bool TestWebPage()
{
WebRequest request = WebRequest.Create("http://www.costco.com");
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
}
CIL代碼:
//000021: public void TestWebPage()
//000022: {
IL_0000: /* 00 | */ nop
.line 23,23 : 7,71 ''
//000023: WebRequest request = WebRequest.Create("http://www.costco.com");
IL_0001: /* 72 | (70)000001 */ ldstr "http://www.costco.com" /* 70000001 */
IL_0006: /* 28 | (0A)000012 */ call class [System/*23000003*/]System.Net.WebRequest/*01000016*/ [System/*23000003*/]System.Net.WebRequest/*01000016*/::Create(string) /* 0A000012 */
IL_000b: /* 0A | */ stloc.0
.line 24,24 : 7,70 ''
//000024: request.Proxy.Credentials = CredentialCache.DefaultCredentials;
IL_000c: /* 06 | */ ldloc.0
IL_000d: /* 6F | (0A)000013 */ callvirt instance class [System/*23000003*/]System.Net.IWebProxy/*01000017*/ [System/*23000003*/]System.Net.WebRequest/*01000016*/::get_Proxy() /* 0A000013 */
IL_0012: /* 28 | (0A)000014 */ call class [System/*23000003*/]System.Net.ICredentials/*01000019*/ [System/*23000003*/]System.Net.CredentialCache/*01000018*/::get_DefaultCredentials() /* 0A000014 */
IL_0017: /* 6F | (0A)000015 */ callvirt instance void [System/*23000003*/]System.Net.IWebProxy/*01000017*/::set_Credentials(class [System/*23000003*/]System.Net.ICredentials/*01000019*/) /* 0A000015 */
IL_001c: /* 00 | */ nop
.line 25,25 : 7,73 ''
具體來說,我無法理解在CIL代碼以下的事情:
CLR運行時如何知道set_Credentials要傳遞從get_Defa返回的值ultCredentials,因爲除了註釋部分「/ /」之外似乎沒有任何鏈接。
CLR如何在System.Net.WebRequest的當前實例上調用get_Proxy,即在CIL代碼中是否存在指向實例編號的指針?