推 Peruheru: 我還以為這種東西,會被轉譯成一樣的語法,原來不是嗎? 12/01 10:14
→ fatrabitree: (p as Child).DoSomething() 呢? 12/01 11:55
→ iterator: 兩者用不同的MSIL opcode, as: isinst, cast: castclass 12/01 14:29
→ iterator: 樓上這種寫法, 對 compiler 來說是沒什麼差別的. 12/01 15:18
→ Litfal: 請勾選最佳化(或選Release方案)後直接執行,或用Ctrl+F5 12/01 18:18
→ Litfal: 他們最後call的mscorwks不一樣,會導致編譯出來的x86 asm 12/01 18:38
→ Litfal: 差蠻多的。說到這個必須要提一下,.net Framework 4.0大幅 12/01 18:39
→ Litfal: 優化了x64版本的as,但x86並沒有受惠。 12/01 18:41
→ Litfal: 更正一下,編譯出來的x86 asm,應該要說"執行的"比較確實 12/01 18:42
→ jizang: 原文中就已經提到 As 在編譯階段就已經判斷過是否可以轉型 12/01 20:17
→ jizang: ,所以在執行階段就可以略過某些例外檢查,所以說 As 比 C 12/01 20:17
→ jizang: ast 快是很合理的結果! 12/01 20:17
→ iterator: 如果討論這種問題時,還要先講選擇 Release mode, 12/01 20:34
→ iterator: 或是選擇Start Without Debugging,就有點令人莞爾了.. 12/01 20:36
→ iterator: 要說 .NET 4 之後大幅優化 x64 的 as, 卻沒讓 x86 受惠, 12/01 20:37
→ iterator: 這論述有問題,而且跟實際狀況是有矛盾的. 12/01 20:40
→ iterator: to jizang, 原文沒這樣寫吧. 12/01 21:02
→ Litfal: 對不起我資質駑鈍,既看不出你原文有提測試環境,也看不出 12/01 23:30
→ Litfal: 編譯目標平台,我還是退下以免丟人現眼。 12/01 23:30
→ Litfal: ^最佳化 12/01 23:32