try-finally,return的執行順序小析~
項目中一個try-finally語句中有return,不明白執行的順序,于是搜索了一番。
http://www.usdprofits.com/finally-return-t344073.htm
雖然回答的是JAVA的,但也有借鑒作用。
===================================================
首先執行finally,然后才執行return;
如果finally里面有return,try中的return不會再執行;
如果try中有了異常,return也不執行;
ps:異常實際上也是一種返回值
===================================================
http://fanyaojun.bokee.com/126611.html
有一段程序顯示先執行try,再finally最后return。
http://www.blog.edu.cn/user1/16293/archives/2006/1248335.shtml
分析了IL代碼,指出了比較根本性的原因。
但我寫了一個程序卻出現了一個怪問題。
主程序清單如下:






























它顯示的是什么呢?
按照前面講的,先寫“finally block executed.”再輸出3
可實驗結果卻是
finally block executed.
2
怎么回事?我也來分析下IL代碼~~以下是TestFR()的~








































這里涉及到3個存儲區:堆棧,局部變量區,計算堆棧。至于它們的區別,我不是很清楚,有人知道的話,告訴我吧。
01句(以下同樣只簡稱后兩位IL_0001)將數字1放到堆棧,02句彈出到局部變量0中,對應的語句就是i = 1;try中幾句是將數字2放到堆棧,再彈出到局部變量0,06句將局部變量0加載到計算堆棧。07句將其彈出到局部變量1,因為只有計算堆棧里有數據,所以彈的是計算堆棧的值。08跳到1a去,但不能跳過finally句。
finally句中將數字3放到局部變量0中,再顯示字符串。
而后,關鍵的地方就到了。1b句將局部變量1加載到計算堆棧,再由ret返回值。
這里,為什么將局部變量1也就是數字2返回呢?不可理解呀~